Analyse de l'offre et l'usage des ressources électroniques des bibliothèques

Auteur : Pablo Iriarte, UNIGE - pablo.iriarte@unige.ch Date : 10.03.2020

Article proposé pour la revue de Biblio Suisse traitant des aspects statistiques de l'offre et l'usage des ressoruces numériques des bibliothèques. Il compléte celui centré sur les aspects qualitatifs qui est préparé en parallèle par Aurélie vieux.

L'analyse se base sur les 7 catégories de bibliothèques créés par l'OFS :

  • Bibliothèques universitaires (période d'observation : 2003-2018)
  • Réseaux de bibliothèques des universités (période d'observation : 2003-2018)
  • Réseaux de bibliothèques des hautes écoles spécialisées (période d'observation : 2003-2018)
  • Bibliothèques des hautes écoles pédagogiques (période d'observation : 2013-2018)
  • Bibliothèques à vocation nationale (période d'observation : 2003-2018)
  • Bibliothèques publiques des villes (communes dès 10'000 habitants) (période d'observation : 2003-2018)
  • Bibliothèques publiques communales et mixtes (communales et scolaires) des communes en dessous de 10'000 habitants (période d'observation : 2008-2018)1

1Les bibliothèques publiques communales et mixtes se limitent à certains cantons partenaires de l'OFS (8 cantons de 2008 à 2010, 10 en 2011, 11 en 2012 et 2013, 12 de 2014 à 2016 et 13 en 2017 et 2018), à terme la participation de l'ensemble des cantons est visée par l'OFS.

Sources des données :

Variables utilisées

Frais d'acquisition

  • E31 Frais d'acquisition de documents (part de E28, arrondis au franc) Frais d'acquisition de documents sur support électronique ou non, exceptés les frais externes d'équipement et de reliure.

  • E32
    → dont frais d'acquisition de documents sur support électronique (part de E31, arrondis au franc)
    Frais d'acquisition de documents sur support électroniques (journaux et périodiques électroniques, bases de données, EBooks, documents audiovisuels digitaux, documents numériques individuels ; définitions voir F45 à F47d), y compris fichiers électroniques (notices de catalogage entre autres).

Offre

  • F37 Offre totale (total de F38 à F44 sans F39a, nombre d'unités physiques) Total des documents (unités physiques) de la bibliothèque (total de F38 à F44 – sans F39a)

  • F45 Journaux et périodiques électroniques disponibles en ligne (nombre de titres)
    Journaux et périodiques courants sous forme électronique. Consultables en texte intégral avec licence ou gratuitement en ligne si rendus disponibles par la bibliothèque (i.e. inscrits au catalogue). Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre).

  • F47a
    Bases de données disponibles en ligne (nombre de titres)
    Collections de données sous forme électronique (texte intégral, bibliographies ou autres) accompagnées d'un logiciel de recherche. Seules les bases de données au bénéfice d'une licence d'utilisation sont comptées.
    Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre). Les sous-banques de données ou banques de données partielles qui font partie d’une base de données supérieure ne sont pas comptées séparément.

  • F47b
    Ebooks disponibles en ligne (nombre de titres)
    Ebooks : livres électroniques acquis sous licence ou par achat, en libre accès ou numérisés par la bibliothèque si rendu disponibles par la bibliothèque (i.e. inscrits au catalogue). Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre).
    Sont compris : les documents électroniques des hautes écoles (thèses, mémoires). Les autres travaux de qualification (travaux de master etc.) sont aussi comptés s’ils remplissent ces critères.
    Sont exclus : les revues et journaux courants, les médias numériques AV et les documents numériques individuels.

  • F47c
    Documents audiovisuels digitaux disponibles en ligne (nombre de titres)
    Documents audiovisuels digitaux acquis sous licence ou par achat, en libre accès et rendu disponible par la bibliothèque (i.e. inscrits au catalogue). Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre).

  • F47d
    Documents numériques individuels disponibles en ligne (nombre de titres)
    Autres documents numériques individuels (manuscrits numérisés, articles isolés de journaux/périodiques, documents cartographiques, notes, documents iconographiques, etc.).
    Sont exclus : les revues et journaux électroniques courants, les livres électroniques, les médias AV numériques.

Utilisation

  • G59 Total prêts (nombre de prêts enregistrés ou de bulletins de prêt délivrés) Prêts établis sur la base du système informatique ou par comptage manuel, y compris les prêts en salle de lecture, par envoi direct, les prêts entre bibliothèques (envoyés et reçus), les prolongations. Seules les prolongations effectuées par les utilisateurs eux-mêmes ou par le personnel sont considérées comme des prolongations. Les prolongations automatiques effectuées par le système informatique sans l'intervention de l'utilisateur ou du personnel ne sont pas prises en compte. Les prêts renouvelés (nouvelle transaction enregistrée dans le système) après un délai de prêt écoulé comptent comme de nouveaux prêts. Sont exclus : reproductions d'articles de périodiques, de monographies, de recueils de mélanges etc., prêts pour utilisation par la bibliothèque, documents utilisés provenant de collections spéciales.

  • G62 Articles (nombre de demandes satisfaites) Nombre total des demandes d'articles de périodiques, de monographies, de recueils de mélanges, etc. satisfaites (recherche, établissement d'une copie, envoi), indépendamment de la procédure de commande (prêt entre bibliothèques, commande directe auprès de la bibliothèque) ou du mode de livraison (copies papier ou électronique).

  • G63 Total utilisation de documents spéciaux ou précieux (total de G64 à G67, nombre d'unités utilisées) Nombre total de documents spéciaux ou précieux consultés sur place et sous surveillance. Mode de comptage : a) par unités d'archivage utilisées (boîtes, p. ex.), lorsqu'elles sont remises pour examen en tant que telles aux utilisateurs ; b) par unités physiques remises aux utilisateurs par le personnel.

  • G68 Nombre de reproductions effectuées Documents de substitution réalisés à partir d'un original a) pour autant qu'ils soient réalisés ou fournis par le personnel de la bibliothèque à la demande de l’utilisateur ; b) pour autant qu'ils remplissent un but de préservation des biens culturels. Sont exclus : les reproductions produites par l'utilisateur même, les copies ou scannings d'articles de magazine pour l'envoi direct (à reporter sous G62). Mode de comptage précis :

    • photocopies (nombre de pages produites)
    • microfiches, microfilms, diapositives, autres genres de reprographies (nombre d’unités physiques produites)
    • fichiers informatiques (nombre de fichiers produits .jpg, .tif, *.pdf etc.)
  • G71a
    Bases de données (nombre de fichiers de données consultés)
    Bases de données disponibles en ligne. Nombre de fichiers de données effectivement consultés, sélectionnés à partir du résultat d'une recherche dans une base de données. Comptage standardisé par Counter Release version 4 ou plus récent (record views), si disponible.

  • G71b
    Ebooks (nombre de téléchargements)
    Ebooks disponibles en ligne (définition voir F47b).
    Téléchargements : réception réussie (sur le disque dur ou aussi seulement à l’écran), sous forme de fichier, d'un document électronique (ou d'un extrait de document) provenant d'un service en ligne ou d'un service internet proposé par la bibliothèque. Comptage standardisé par Counter Release version 4 ou plus récent, si disponible (sinon, autre comptage automatique). Y compris : utilisation de livres électroniques comme prêt virtuel.

  • G71c
    Documents audiovisuels digitaux (nombre d’accès via téléchargement ou en streaming)
    Documents audiovisuels digitaux disponibles en ligne (définition voir F47c).
    Téléchargement ou en streaming : réception réussie (sur le disque dur ou aussi seulement à l’écran), sous forme de fichier, d'un document électronique (ou d'un extrait de document) provenant d'un service en ligne ou d'un service internet proposé par la bibliothèque. Y compris : utilisation comme prêt virtuel.

  • G72a
    Journaux/périodiques électroniques (nombre de téléchargements)
    Journaux/périodiques courants sous forme électronique accessible en ligne (définition voir F45).
    Téléchargements : réception réussie (sur le disque dur ou aussi seulement à l’écran), sous forme de fichier, d'articles de revues électroniques provenant d'un service en ligne ou d'un service internet proposé par la bibliothèque. Comptage standardisé par compteur si disponible.

Traitement des données de l'OFS

  1. Importation et nottoyage des données de l'OFS pour chauque catégorie de bibliothèques
  2. Calcul des sommes et des moyennes pour chaque catégorie
  3. Constitution d'un dataframe par catégorie
  4. Constitution d'un dataframe global pour les sommes et les moyennes
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter
import matplotlib as mpl
import sys
%matplotlib inline
In [2]:
# URLs des données OFS (fichiers excel)
url_ofs_unis = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186561/master')
url_ofs_unis_reseaux = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186559/master')
url_ofs_hes = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186562/master')
url_ofs_hep = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186572/master')
url_ofs_bn = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186558/master')
url_ofs_villes = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186563/master')
url_ofs_communes = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186571/master')
url_ofs_population = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9486040/master')
url_ofs_etudiants = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/11787925/master')

Bibliothèques universitaires

Période d'observation : 2003-2018

In [3]:
# fichier OFS pour les bibliothèques universitaires : totaux, moyennes et réponses

# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 18, 2004 : 18, 2005 : 18, 2006 : 17, 2007 : 17, 2008 : 18, 2009 : 18, 2010 : 18,
          2011 : 18, 2012 : 18, 2013 : 18, 2014 : 18, 2015 : 18, 2016 : 18, 2017 : 19, 2018 : 19}

# initialiser les 3 dataframes
df_unis = pd.DataFrame()
df_unis_moyennes = pd.DataFrame()
df_unis_reponses = pd.DataFrame()

# boucle de calculs pour chaque onglet annuel
for year in years:
    # les lignes à ignorer changent en 2015
    if year > 2015:
        df_unis_year = pd.read_excel(url_ofs_unis, header=0, encoding=sys.getfilesystemencoding(),
                                     sheet_name=str(year), skiprows=4, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_unis_year = df_unis_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    else:
        df_unis_year = pd.read_excel(url_ofs_unis, header=0, encoding=sys.getfilesystemencoding(),
                                     sheet_name=str(year), skiprows=3, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_unis_year = df_unis_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    # supprimer les 4 premières lignes
    df_unis_year = df_unis_year.iloc[4:,:]
    # garder les lignes avec code sur la première colonne
    count_year = df_unis_year['Unnamed: 0'].count()
    df_unis_year = df_unis_year.loc[df_unis_year['Unnamed: 0'].notnull()]
    # supprimer les 3 premières colonnes
    df_unis_year = df_unis_year.iloc[:,3:]
    # remplacer ... par NaN
    df_unis_year = df_unis_year.replace('...', np.nan)
    df_unis_year = df_unis_year.replace('…', np.nan)
    # Nettoyage des scories
    # valeur en 2005 G70 : "568 045"
    df_unis_year = df_unis_year.replace('568[^0-9]+045', 568045, regex=True)
    # remplacer valeurs vides contenant "          " ou "0         " ou " " ou ".    " ou "."
    df_unis_year = df_unis_year.replace('0         ', 0)
    df_unis_year = df_unis_year.replace('.    ', np.nan)
    df_unis_year = df_unis_year.replace('.', np.nan)
    df_unis_year = df_unis_year.replace('          ', np.nan)
    df_unis_year = df_unis_year.replace(' ', np.nan)
    # calcul des totaux, moyennes et nombre de réponses
    df_unis_year_tot = df_unis_year.sum()
    df_unis_year_mean = df_unis_year.mean()
    df_unis_year_reponses = df_unis_year.count()
    # ajouer l'année
    df_unis_year_tot['Année'] = year
    df_unis_year_mean['Année'] = year
    df_unis_year_reponses['Année'] = year
    # calcul du nombre de lignes
    df_unis_year_tot['NBIB'] = count_year
    df_unis_year_mean['NBIB'] = count_year
    df_unis_year_reponses['NBIB'] = count_year
    # ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
    df_unis = df_unis.append(df_unis_year_tot, ignore_index=True)
    df_unis_moyennes = df_unis_moyennes.append(df_unis_year_mean, ignore_index=True)
    df_unis_reponses = df_unis_reponses.append(df_unis_year_reponses, ignore_index=True)
    # test des champs pour traquer les erreurs et ajouter des remplacements ci-dessus
    for champ in df_unis_year.columns:
        if (df_unis_year.dtypes[champ] == 'object'):
            print (' ERROR IN ' + str(year) + ' ' + champ)
            print (df_unis_year[champ])
            
# convertir l'année en entiers et ajouter l'index sur l'année
df_unis['Année'] = df_unis['Année'].astype(int)
df_unis_moyennes['Année'] = df_unis_moyennes['Année'].astype(int)
df_unis_reponses['Année'] = df_unis_reponses['Année'].astype(int)

df_unis = df_unis.set_index('Année')
df_unis_moyennes = df_unis_moyennes.set_index('Année')
df_unis_reponses = df_unis_reponses.set_index('Année')
df_unis_reponses = df_unis_reponses.fillna(0)

df_unis
Out[3]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 199366.0 4451696.0 1004.640 864.4800 84.9000 55.26 1337.0 571.0 540.0 226.0 ... 2350918.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 223932.0 5285870.0 1044.795 876.2300 109.2950 59.27 1396.0 597.0 574.0 225.0 ... 2972510.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 224456.0 5308574.0 1032.820 870.6500 101.5000 60.67 1388.0 587.0 594.0 207.0 ... 3204853.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 223269.0 5238288.0 930.300 676.3664 69.9233 46.00 1261.0 536.0 538.0 187.0 ... 3621422.0 13.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 221885.0 6817210.0 903.600 770.9040 81.2000 51.33 1274.0 508.0 528.0 238.0 ... 4534047.0 13.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 233356.0 4814027.0 1157.000 957.8370 137.4800 61.63 1733.0 614.0 679.0 440.0 ... 8745182.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 241968.0 4774576.0 1188.300 968.7080 157.2300 62.48 1779.0 655.0 734.0 390.0 ... 10421465.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 248139.0 3779735.0 1217.100 866.5900 172.7700 57.70 1845.0 609.0 705.0 316.0 ... 9827299.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 257239.0 4472517.0 1245.600 1008.8100 176.1600 60.60 1880.0 636.0 779.0 465.0 ... 11507590.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 254824.0 4981828.0 1269.000 1002.7900 199.6600 66.40 1843.0 633.0 802.0 408.0 ... 11653146.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 254260.0 6029427.0 1254.820 1019.2100 171.2100 64.30 1917.0 664.0 843.0 410.0 ... 13069635.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 252741.0 7949228.0 1276.140 1033.3700 174.0700 67.70 1874.0 633.0 846.0 390.0 ... 16057015.0 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 248984.0 9329872.0 1288.810 1030.9100 172.3700 68.33 1901.0 663.0 842.0 391.0 ... NaN 14.0 12801.0 545590.0 4428.0 2452849.0 964587.0 1946937.0 3172.0 51699.0
2016 259848.0 9798845.0 1289.440 1047.5400 187.5000 54.30 1904.0 626.0 877.0 401.0 ... NaN 14.0 14131.0 770450.0 4675.0 2890757.0 1187153.0 856622.0 4974.0 52840.0
2017 240043.0 10318912.0 1324.810 1065.4100 206.9300 52.45 1983.0 637.0 925.0 421.0 ... NaN 15.0 18492.0 1344668.0 4797.0 3762813.0 1203493.0 1098771.0 5045.0 58560.0
2018 235925.0 9972916.0 1315.870 1067.6200 192.0300 56.22 1920.0 601.0 918.0 401.0 ... NaN 15.0 18963.0 1377893.0 4572.0 4039258.0 1321214.0 1242927.0 5723.0 64035.0

16 rows × 79 columns

In [4]:
df_unis_moyennes
Out[4]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 14240.428571 556462.000000 71.760000 61.748571 6.064286 3.947143 95.500000 40.785714 38.571429 16.142857 ... 2.612131e+05 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 15995.142857 587318.888889 74.628214 62.587857 7.806786 4.233571 99.714286 42.642857 41.000000 16.071429 ... 3.302789e+05 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 16032.571429 589841.555556 73.772857 62.189286 7.250000 4.333571 99.142857 41.928571 42.428571 14.785714 ... 3.560948e+05 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 17174.538462 654786.000000 71.561538 56.363867 5.826942 3.833333 97.000000 41.230769 41.384615 14.384615 ... 4.023802e+05 13.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 17068.076923 757467.777778 69.507692 59.300308 6.246154 3.948462 98.000000 39.076923 40.615385 18.307692 ... 5.037830e+05 13.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 17950.461538 601753.375000 82.642857 68.416929 9.820000 4.402143 123.785714 43.857143 48.500000 31.428571 ... 7.950165e+05 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 17283.428571 596822.000000 84.878571 69.193429 12.094615 4.806154 127.071429 46.785714 52.428571 27.857143 ... 9.474059e+05 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 17724.214286 629955.833333 86.935714 66.660769 13.290000 4.438462 131.785714 46.846154 54.230769 24.307692 ... 8.189416e+05 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 18374.214286 559064.625000 88.971429 72.057857 12.582857 4.328571 134.285714 45.428571 55.642857 33.214286 ... 9.589658e+05 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 18201.714286 622728.500000 90.642857 71.627857 14.261429 4.742857 131.642857 45.214286 57.285714 29.142857 ... 1.059377e+06 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 18161.428571 753678.375000 89.630000 72.800714 12.229286 4.592857 136.928571 47.428571 60.214286 29.285714 ... 1.188149e+06 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 18052.928571 794922.800000 91.152857 73.812143 12.433571 4.835714 133.857143 45.214286 60.428571 27.857143 ... 1.235155e+06 14.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 17784.571429 848170.181818 92.057857 73.636429 13.259231 4.880714 135.785714 47.357143 60.142857 27.928571 ... NaN 14.0 1066.750000 38970.714286 316.285714 188680.692308 107176.333333 176994.272727 288.363636 4308.250000
2016 18560.571429 890804.090909 92.102857 74.824286 13.392857 3.878571 136.000000 44.714286 62.642857 28.642857 ... NaN 14.0 1177.583333 55032.142857 333.928571 206482.642857 118715.300000 77874.727273 355.285714 3774.285714
2017 16002.866667 938082.909091 88.320667 71.027333 13.795333 3.496667 132.200000 42.466667 61.666667 28.066667 ... NaN 15.0 1422.461538 89644.533333 319.800000 250854.200000 100291.083333 91564.250000 360.357143 4182.857143
2018 15728.333333 906628.727273 87.724667 71.174667 12.802000 4.015714 128.000000 40.066667 61.200000 26.733333 ... NaN 15.0 1354.500000 91859.533333 304.800000 269283.866667 110101.166667 103577.250000 408.785714 4573.928571

16 rows × 79 columns

In [5]:
df_unis_reponses
Out[5]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 14.0 8.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 9.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2004 14.0 9.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 9.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2005 14.0 9.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 9.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2006 13.0 8.0 13.0 12.0 12.0 12.0 13.0 13.0 13.0 13.0 ... 9.0 13.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2007 13.0 9.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 13.0 ... 9.0 13.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2008 13.0 8.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 11.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2009 14.0 8.0 14.0 14.0 13.0 13.0 14.0 14.0 14.0 14.0 ... 11.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2010 14.0 6.0 14.0 13.0 13.0 13.0 14.0 13.0 13.0 13.0 ... 12.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2011 14.0 8.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 12.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2012 14.0 8.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 11.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2013 14.0 8.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 11.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2014 14.0 10.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 13.0 14.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2015 14.0 11.0 14.0 14.0 13.0 14.0 14.0 14.0 14.0 14.0 ... 0.0 14.0 12.0 14.0 14.0 13.0 9.0 11.0 11.0 12.0
2016 14.0 11.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 14.0 ... 0.0 14.0 12.0 14.0 14.0 14.0 10.0 11.0 14.0 14.0
2017 15.0 11.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 15.0 ... 0.0 15.0 13.0 15.0 15.0 15.0 12.0 12.0 14.0 14.0
2018 15.0 11.0 15.0 15.0 15.0 14.0 15.0 15.0 15.0 15.0 ... 0.0 15.0 14.0 15.0 15.0 15.0 12.0 12.0 14.0 14.0

16 rows × 79 columns

In [6]:
# afficher le nom des colonnes pour tester si tout est OK
df_unis.columns
Out[6]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'D14',
       'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24',
       'D25', 'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33',
       'E34', 'E35', 'E36', 'F37', 'F38', 'F39', 'F40', 'F41', 'F42', 'F43',
       'F44', 'F45', 'F46', 'F47', 'F48', 'F49', 'F50', 'F51', 'F52', 'F53',
       'F54', 'F55', 'F56', 'G57', 'G58', 'G59', 'G60', 'G61', 'G62', 'G63',
       'G64', 'G65', 'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB',
       'F39a', 'F45a', 'F47a', 'F47b', 'F47c', 'F47d', 'G58a', 'G58b'],
      dtype='object')

Réseaux de bibliothèques des universités

Période d'observation : 2003-2018

In [7]:
# fichier OFS pour les réseaux de bibliothèques des universités : totaux, moyennes et réponses

# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 244, 2004 : 254, 2005 : 252, 2006 : 218, 2007 : 221, 2008 : 165, 2009 : 157, 2010 : 128,
        2011 : 121, 2012 : 113, 2013 : 113, 2014 : 108, 2015 : 100, 2016 : 90, 2017 : 79, 2018 : 76}

# initialiser les 3 dataframes
df_unis_reseaux = pd.DataFrame()
df_unis_reseaux_moyennes = pd.DataFrame()
df_unis_reseaux_reponses = pd.DataFrame()

# boucle de calculs pour chaque onglet annuel
for year in years:
    # les lignes à ignorer changent en 2015
    if year > 2015:
        df_unis_reseaux_year = pd.read_excel(url_ofs_unis_reseaux, header=0,
                                             encoding=sys.getfilesystemencoding(), sheet_name=str(year),
                                             skiprows=4, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_unis_reseaux_year = df_unis_reseaux_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    else:
        df_unis_reseaux_year = pd.read_excel(url_ofs_unis_reseaux, header=0,
                                             encoding=sys.getfilesystemencoding(), sheet_name=str(year),
                                             skiprows=3, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_unis_reseaux_year = df_unis_reseaux_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    # supprimer les 4 premières lignes
    df_unis_reseaux_year = df_unis_reseaux_year.iloc[4:,:]
    # garder les lignes avec code sur la première colonne
    count_year = df_unis_reseaux_year['Unnamed: 0'].count()
    df_unis_reseaux_year = df_unis_reseaux_year.loc[df_unis_reseaux_year['Unnamed: 0'].notnull()]
    # supprimer les 3 premières colonnes
    df_unis_reseaux_year = df_unis_reseaux_year.iloc[:,3:]
    # remplacer ... par NaN
    df_unis_reseaux_year = df_unis_reseaux_year.replace('...', np.nan)
    df_unis_reseaux_year = df_unis_reseaux_year.replace('…', np.nan)
    # Nettoyage des scories
    # remplacer valeurs vides contenant "          " ou "0         " ou " " ou ".    " ou "."
    df_unis_reseaux_year = df_unis_reseaux_year.replace('0         ', 0)
    df_unis_reseaux_year = df_unis_reseaux_year.replace('..', np.nan)
    df_unis_reseaux_year = df_unis_reseaux_year.replace('.', np.nan)
    df_unis_reseaux_year = df_unis_reseaux_year.replace('          ', np.nan)
    df_unis_reseaux_year = df_unis_reseaux_year.replace('                    [^0-9]+', np.nan, regex=True)
    df_unis_reseaux_year = df_unis_reseaux_year.replace(' ', np.nan)
    df_unis_reseaux_year = df_unis_reseaux_year.replace('o', 0)
    df_unis_reseaux_year = df_unis_reseaux_year.replace(',', np.nan)
    # convertir le reste en nombres
    # for champ in df_unis_reseaux_year.columns:
    #    df_unis_reseaux_year[champ] = pd.to_numeric(df_unis_reseaux_year[champ])
    # calcul des totaux, moyennes et nombre de réponses
    df_unis_reseaux_year_tot = df_unis_reseaux_year.sum()
    df_unis_reseaux_year_mean = df_unis_reseaux_year.mean()
    df_unis_reseaux_year_reponses = df_unis_reseaux_year.count()
    # ajouer l'année
    df_unis_reseaux_year_tot['Année'] = year
    df_unis_reseaux_year_mean['Année'] = year
    df_unis_reseaux_year_reponses['Année'] = year
    # calcul du nombre de lignes
    df_unis_reseaux_year_tot['NBIB'] = count_year
    df_unis_reseaux_year_mean['NBIB'] = count_year
    df_unis_reseaux_year_reponses['NBIB'] = count_year
    # ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
    df_unis_reseaux = df_unis_reseaux.append(df_unis_reseaux_year_tot, ignore_index=True)
    df_unis_reseaux_moyennes = df_unis_reseaux_moyennes.append(df_unis_reseaux_year_mean, ignore_index=True)
    df_unis_reseaux_reponses = df_unis_reseaux_reponses.append(df_unis_reseaux_year_reponses, ignore_index=True)
    # test des champs pour traquer les erreurs et ajouter des remplacements ci-dessus
    for champ in df_unis_reseaux_year.columns:
        if (df_unis_reseaux_year.dtypes[champ] == 'object'):
            print (' ERROR IN ' + str(year) + ' ' + champ)
            print (df_unis_reseaux_year[champ])
            
# convertir l'année en entiers et ajouter l'index sur l'année
df_unis_reseaux['Année'] = df_unis_reseaux['Année'].astype(int)
df_unis_reseaux_moyennes['Année'] = df_unis_reseaux_moyennes['Année'].astype(int)
df_unis_reseaux_reponses['Année'] = df_unis_reseaux_reponses['Année'].astype(int)

df_unis_reseaux = df_unis_reseaux.set_index('Année')
df_unis_reseaux_moyennes = df_unis_reseaux_moyennes.set_index('Année')
df_unis_reseaux_reponses = df_unis_reseaux_reponses.set_index('Année')
df_unis_reseaux_reponses = df_unis_reseaux_reponses.fillna(0)

df_unis_reseaux
Out[7]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 0.0 0.0 366.7923 298.515 50.120 10.10 729.0 103.0 273.0 353.0 ... 358029.0 212.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 0.0 0.0 395.4000 333.560 55.500 8.18 773.4 112.9 331.0 340.0 ... 443104.0 222.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 0.0 0.0 391.0800 324.560 56.440 9.50 758.5 106.5 337.0 315.0 ... 422250.0 220.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 388308.0 2497915.0 400.4300 314.610 51.695 11.08 839.0 108.0 294.0 318.0 ... 554648.0 186.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 426654.0 2409028.0 414.7700 277.140 61.725 11.20 843.0 118.0 312.0 298.0 ... 572396.0 189.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 110325.0 239464.0 169.0000 140.210 23.420 0.60 375.0 29.0 133.0 191.0 ... 190513.0 141.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 79130.0 235669.0 197.2500 150.610 35.695 6.33 406.0 44.0 152.0 189.0 ... 199258.0 133.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 60610.0 126236.0 193.7500 146.470 32.740 8.14 394.0 34.0 147.0 192.0 ... 186568.0 108.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 59655.0 222655.0 189.2000 146.030 33.070 7.52 385.0 34.0 153.0 181.0 ... 189743.0 101.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 56926.0 319023.0 200.5000 142.660 30.180 10.06 403.0 36.0 153.0 189.0 ... 205929.0 93.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 47829.0 386310.0 194.8000 135.410 30.850 8.23 393.0 35.0 131.0 176.0 ... 173724.0 93.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 45849.0 465076.0 169.0700 134.370 26.110 7.29 350.0 32.0 120.0 174.0 ... 186195.0 88.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 38580.0 452492.0 139.2000 118.640 13.470 5.69 331.0 29.0 117.0 185.0 ... NaN 84.0 2.0 218664.0 148.0 2830.0 3.0 136776.0 454.0 4106.0
2016 36007.0 603832.0 137.2700 115.560 11.160 7.30 332.0 27.0 117.0 188.0 ... NaN 74.0 3.0 408326.0 146.0 148398.0 3.0 35.0 427.0 3643.0
2017 30869.0 418795.0 107.9600 98.920 7.040 2.00 273.0 15.0 98.0 160.0 ... NaN 67.0 0.0 311.0 39.0 1017.0 20.0 0.0 516.0 5087.0
2018 27782.0 449833.0 103.3500 93.870 7.980 1.50 269.0 15.0 89.0 165.0 ... NaN 64.0 0.0 305.0 37.0 1266.0 23.0 50.0 822.0 5131.0

16 rows × 79 columns

In [8]:
df_unis_reseaux_moyennes
Out[8]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 NaN NaN 1.763425 1.449102 0.242126 0.048325 3.471429 0.490476 1.300000 1.680952 ... 7020.176471 212.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN 1.781081 1.502523 0.250000 0.036847 3.483784 0.508559 1.490991 1.531532 ... 2080.300469 222.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN 1.777636 1.475273 0.256545 0.043379 3.447727 0.484091 1.531818 1.431818 ... 5344.936709 220.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 3629.046729 29045.523256 2.164486 1.966313 0.346946 0.075374 4.510753 0.670807 1.814815 1.962963 ... 9244.133333 186.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 3987.420561 29024.433735 2.229946 1.659521 0.395673 0.072258 4.460317 0.719512 1.890909 1.817073 ... 9868.896552 189.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 1414.423077 4434.518519 1.320313 1.198376 0.201897 0.005128 2.884615 0.247863 1.136752 1.632479 ... 5443.228571 141.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 976.913580 4134.543860 1.483083 1.234508 0.305085 0.054569 3.052632 0.369748 1.245902 1.575000 ... 4744.238095 133.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 891.323529 2744.260870 1.862981 1.541789 0.363778 0.089451 3.648148 0.343434 1.470000 1.959184 ... 5653.575758 108.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 903.863636 4947.888889 1.873267 1.505464 0.344479 0.079158 3.811881 0.354167 1.593750 1.865979 ... 7297.807692 101.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 849.641791 7419.139535 2.155914 1.621136 0.355059 0.116977 4.333333 0.423529 1.800000 2.223529 ... 6435.281250 93.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 693.173913 9197.857143 2.094624 1.538750 0.362941 0.096824 4.225806 0.421687 1.541176 2.070588 ... 6948.960000 93.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 764.150000 15502.533333 1.943333 1.580824 0.318415 0.086786 3.977273 0.376471 1.379310 2.000000 ... 9309.750000 88.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 688.928571 18853.833333 1.677108 1.429398 0.164268 0.069390 3.940476 0.345238 1.392857 2.202381 ... NaN 84.0 0.040816 5754.315789 4.111111 80.857143 0.085714 3696.648649 10.088889 91.244444
2016 706.019608 28753.904762 1.906528 1.605000 0.155000 0.100000 4.486486 0.364865 1.581081 2.540541 ... NaN 74.0 0.058824 14080.206897 4.424242 5117.172414 0.096774 1.206897 9.488889 84.720930
2017 701.568182 23266.388889 1.686875 1.545625 0.111746 0.031746 4.136364 0.230769 1.484848 2.424242 ... NaN 67.0 0.000000 11.518519 1.300000 37.666667 0.740741 0.000000 10.750000 115.613636
2018 661.476190 28114.562500 1.694262 1.538852 0.130820 0.025000 4.338710 0.241935 1.435484 2.661290 ... NaN 64.0 0.000000 10.517241 1.156250 42.200000 0.766667 1.724138 17.489362 114.022222

16 rows × 79 columns

In [9]:
df_unis_reseaux_reponses
Out[9]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 0.0 0.0 208.0 206.0 207.0 209.0 210.0 210.0 210.0 210.0 ... 51.0 212.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2004 0.0 0.0 222.0 222.0 222.0 222.0 222.0 222.0 222.0 222.0 ... 213.0 222.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2005 0.0 0.0 220.0 220.0 220.0 219.0 220.0 220.0 220.0 220.0 ... 79.0 220.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2006 107.0 86.0 185.0 160.0 149.0 147.0 186.0 161.0 162.0 162.0 ... 60.0 186.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2007 107.0 83.0 186.0 167.0 156.0 155.0 189.0 164.0 165.0 164.0 ... 58.0 189.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2008 78.0 54.0 128.0 117.0 116.0 117.0 130.0 117.0 117.0 117.0 ... 35.0 141.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2009 81.0 57.0 133.0 122.0 117.0 116.0 133.0 119.0 122.0 120.0 ... 42.0 133.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2010 68.0 46.0 104.0 95.0 90.0 91.0 108.0 99.0 100.0 98.0 ... 33.0 108.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2011 66.0 45.0 101.0 97.0 96.0 95.0 101.0 96.0 96.0 97.0 ... 26.0 101.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2012 67.0 43.0 93.0 88.0 85.0 86.0 93.0 85.0 85.0 85.0 ... 32.0 93.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2013 69.0 42.0 93.0 88.0 85.0 85.0 93.0 83.0 85.0 85.0 ... 25.0 93.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2014 60.0 30.0 87.0 85.0 82.0 84.0 88.0 85.0 87.0 87.0 ... 20.0 88.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2015 56.0 24.0 83.0 83.0 82.0 82.0 84.0 84.0 84.0 84.0 ... 0.0 84.0 49.0 38.0 36.0 35.0 35.0 37.0 45.0 45.0
2016 51.0 21.0 72.0 72.0 72.0 73.0 74.0 74.0 74.0 74.0 ... 0.0 74.0 51.0 29.0 33.0 29.0 31.0 29.0 45.0 43.0
2017 44.0 18.0 64.0 64.0 63.0 63.0 66.0 65.0 66.0 66.0 ... 0.0 67.0 47.0 27.0 30.0 27.0 27.0 28.0 48.0 44.0
2018 42.0 16.0 61.0 61.0 61.0 60.0 62.0 62.0 62.0 62.0 ... 0.0 64.0 51.0 29.0 32.0 30.0 30.0 29.0 47.0 45.0

16 rows × 79 columns

In [10]:
# afficher le nom des colonnes pour tester si tout est OK
df_unis_reseaux.columns
Out[10]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'D14',
       'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24',
       'D25', 'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33',
       'E34', 'E35', 'E36', 'F37', 'F38', 'F39', 'F40', 'F41', 'F42', 'F43',
       'F44', 'F45', 'F46', 'F47', 'F48', 'F49', 'F50', 'F51', 'F52', 'F53',
       'F54', 'F55', 'F56', 'G57', 'G58', 'G59', 'G60', 'G61', 'G62', 'G63',
       'G64', 'G65', 'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB',
       'F39a', 'F45a', 'F47a', 'F47b', 'F47c', 'F47d', 'G58a', 'G58b'],
      dtype='object')

Réseaux de bibliothèques des hautes écoles spécialisées

Période d'observation : 2003-2018

In [11]:
# fichier OFS pour les HES : totaux, moyennes et réponses

# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 23, 2004 : 23, 2005 : 66, 2006 : 88, 2007 : 90, 2008 : 87, 2009 : 87, 2010 : 96,
        2011 : 90, 2012 : 94, 2013 : 89, 2014 : 91, 2015 : 93, 2016 : 92, 2017 : 94, 2018 : 87}

# initialiser les 3 dataframes
df_hes = pd.DataFrame()
df_hes_moyennes = pd.DataFrame()
df_hes_reponses = pd.DataFrame()

# boucle de calculs pour chaque onglet annuel
for year in years:
    # les lignes à ignorer changent en 2015
    if year > 2015:
        df_hes_year = pd.read_excel(url_ofs_hes, header=0, encoding=sys.getfilesystemencoding(),
                                    sheet_name=str(year), skiprows=4, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_hes_year = df_hes_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    else:
        df_hes_year = pd.read_excel(url_ofs_hes, header=0, encoding=sys.getfilesystemencoding(),
                                    sheet_name=str(year), skiprows=3, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_hes_year = df_hes_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    # supprimer les 4 premières lignes
    df_hes_year = df_hes_year.iloc[4:,:]
    # garder les lignes avec code sur la première colonne
    count_year = df_hes_year['Unnamed: 0'].count()
    df_hes_year = df_hes_year.loc[df_hes_year['Unnamed: 0'].notnull()]
    # supprimer les 3 premières colonnes
    df_hes_year = df_hes_year.iloc[:,3:]
    # remplacer ... par NaN
    df_hes_year = df_hes_year.replace('...', np.nan)
    df_hes_year = df_hes_year.replace('…', np.nan)
    # corrections des scories
    # remplacer les valeurs qui ont du texte en 2016 : 7'621’644 ; 5'560’227 ; 2'061’417
    # et 2015 : 7’365’794 ; 5'200’311 ; 2'165’483
    df_hes_year = df_hes_year.replace('7\'621’644', 7621644)
    df_hes_year = df_hes_year.replace('5\'560’227', 5560227)
    df_hes_year = df_hes_year.replace('2\'061’417', 2061417)
    df_hes_year = df_hes_year.replace('7’365’794[^0-9]+', 7365794, regex=True)
    df_hes_year = df_hes_year.replace('5\'200’311', 5200311)
    df_hes_year = df_hes_year.replace('2\'165’483', 2165483)
    # remplacer valeurs vides contenant "          " ou "0         " ou " " ou ".    " ou "."
    df_hes_year = df_hes_year.replace('0         ', 0)
    df_hes_year = df_hes_year.replace('.    ', np.nan)
    df_hes_year = df_hes_year.replace('.', np.nan)
    df_hes_year = df_hes_year.replace('          ', np.nan)
    df_hes_year = df_hes_year.replace(' ', np.nan)
    # calcul des totaux, moyennes et réponses
    df_hes_year_tot = df_hes_year.sum()
    df_hes_year_mean = df_hes_year.mean()
    df_hes_year_reponses = df_hes_year.count()
    # ajouer l'année
    df_hes_year_tot['Année'] = year
    df_hes_year_mean['Année'] = year
    df_hes_year_reponses['Année'] = year
    # calcul du nombre de lignes
    df_hes_year_tot['NBIB'] = count_year
    df_hes_year_mean['NBIB'] = count_year
    df_hes_year_reponses['NBIB'] = count_year
    # ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
    df_hes = df_hes.append(df_hes_year_tot, ignore_index=True)
    df_hes_moyennes = df_hes_moyennes.append(df_hes_year_mean, ignore_index=True)
    df_hes_reponses = df_hes_reponses.append(df_hes_year_reponses, ignore_index=True)
    # test des champs
    for champ in df_hes_year.columns:
        if (df_hes_year.dtypes[champ] == 'object'):
            print (' ERROR IN ' + str(year) + ' ' + champ)
            print (df_hes_year[champ])
            
# convertir l'année en entiers et ajouter l'index sur l'année
df_hes['Année'] = df_hes['Année'].astype(int)
df_hes_moyennes['Année'] = df_hes_moyennes['Année'].astype(int)
df_hes_reponses['Année'] = df_hes_reponses['Année'].astype(int)

df_hes = df_hes.set_index('Année')
df_hes_moyennes = df_hes_moyennes.set_index('Année')
df_hes_reponses = df_hes_reponses.set_index('Année')
df_hes_reponses = df_hes_reponses.fillna(0)

df_hes
Out[11]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 12353.0 0.0 25.015 24.270 0.750 0.000 52.0 5.0 22.0 25.0 ... 0.0 11.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 13360.0 0.0 33.270 31.020 2.250 0.000 63.0 9.0 25.0 29.0 ... 0.0 11.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 48057.0 12423.0 118.790 89.810 5.427 2.530 189.0 35.0 76.0 45.0 ... 85.0 42.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 65324.0 369304.0 162.950 137.370 10.760 7.200 259.0 56.0 125.0 75.0 ... 108052.0 56.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 60830.0 239192.0 149.500 125.920 12.905 7.000 246.0 46.0 129.0 67.0 ... 21596.0 58.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 71179.0 202953.0 159.700 139.150 10.935 5.800 263.0 45.0 142.0 72.0 ... 38395.0 55.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 77027.0 155853.0 160.800 113.440 10.805 6.485 266.0 43.0 120.0 72.0 ... 37093.0 55.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 97038.0 338852.0 201.340 160.580 25.000 8.580 333.0 69.0 156.0 100.0 ... 24583.0 64.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 98836.0 386048.0 208.050 178.490 17.950 9.680 325.0 73.0 162.0 87.0 ... 24522.0 58.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 107240.0 486306.0 215.400 186.440 13.640 12.490 360.0 80.0 164.0 111.0 ... 27287.0 62.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 107159.0 535289.0 205.000 180.105 13.890 10.800 347.0 79.0 161.0 107.0 ... 30424.0 57.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 112873.0 750941.0 214.240 192.400 12.040 9.800 348.0 85.0 161.0 99.0 ... 31705.0 59.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 112169.0 671865.0 223.660 198.750 14.160 9.800 389.0 84.0 171.0 132.0 ... NaN 61.0 4.0 1241514.0 4220.0 2604955.0 36508224.0 159920.0 2067.0 28046.0
2016 112576.0 583404.0 223.290 195.690 17.050 10.450 386.0 78.0 178.0 130.0 ... NaN 60.0 20.0 1641916.0 4209.0 2677140.0 51428691.0 329007.0 2317.0 31170.0
2017 112697.0 717995.0 236.030 203.230 18.840 10.950 405.0 82.0 191.0 129.0 ... NaN 62.0 22.0 980670.0 2733.0 2816113.0 20327026.0 1466714.0 2550.0 33390.0
2018 111069.0 721676.0 237.190 206.280 13.410 16.200 398.0 88.0 185.0 125.0 ... NaN 55.0 19.0 1539078.0 3841.0 3905916.0 50146058.0 1583965.0 2763.0 35772.0

16 rows × 79 columns

In [12]:
df_hes_moyennes
Out[12]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 1123.000000 NaN 2.274091 2.206364 0.068182 0.000000 4.727273 0.454545 2.000000 2.272727 ... 0.000000 11.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 1336.000000 NaN 3.024545 2.820000 0.204545 0.000000 5.727273 0.818182 2.272727 2.636364 ... 0.000000 11.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 1232.230769 12423.000000 2.897317 2.245250 0.135675 0.064872 4.609756 0.875000 1.900000 1.125000 ... 9.444444 42.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 1333.142857 21723.764706 2.909821 2.693529 0.228936 0.160000 4.625000 1.120000 2.403846 1.500000 ... 9822.909091 56.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 1192.745098 14070.117647 2.669643 2.375849 0.253039 0.140000 4.315789 0.884615 2.388889 1.288462 ... 2159.600000 58.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 1395.666667 16912.750000 2.957407 2.675962 0.210288 0.113725 4.870370 0.865385 2.730769 1.384615 ... 4799.375000 55.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 1510.333333 14168.454545 3.033962 2.268800 0.216100 0.129700 4.925926 0.860000 2.400000 1.440000 ... 4121.444444 55.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 1673.068966 16135.809524 3.247419 2.817193 0.454545 0.156000 5.285714 1.169492 2.644068 1.694915 ... 2731.444444 64.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 1830.296296 21447.111111 3.650000 3.245273 0.326364 0.176000 5.701754 1.327273 2.945455 1.581818 ... 2724.666667 58.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 1881.403509 25595.052632 3.531148 3.160000 0.243571 0.219123 5.901639 1.355932 2.779661 1.881356 ... 2480.636364 62.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 2021.867925 29738.277778 3.660714 3.216161 0.257222 0.200000 6.196429 1.410714 2.875000 1.945455 ... 4346.285714 57.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 2015.589286 34133.681818 3.693793 3.317241 0.215000 0.175000 6.000000 1.465517 2.775862 1.706897 ... 3522.777778 59.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 2003.017857 37325.833333 3.727667 3.312500 0.244138 0.166102 6.483333 1.400000 2.850000 2.237288 ... NaN 61.0 0.086957 24830.280000 72.758621 44151.779661 663785.890909 4997.500000 55.864865 738.052632
2016 1975.017544 41671.714286 3.784576 3.316780 0.304464 0.183333 6.542373 1.322034 3.016949 2.241379 ... NaN 60.0 0.392157 28308.896552 71.338983 46157.586207 886701.568966 10281.468750 56.512195 779.250000
2017 2012.446429 44874.687500 3.869344 3.331639 0.314000 0.182500 6.639344 1.344262 3.131148 2.114754 ... NaN 62.0 0.440000 20430.625000 54.660000 57471.693878 549379.081081 44445.878788 57.954545 776.511628
2018 2135.942308 48111.733333 4.392407 3.820000 0.262941 0.311538 7.370370 1.660377 3.490566 2.314815 ... NaN 55.0 0.395833 29039.207547 71.129630 72331.777778 964347.269231 49498.906250 74.675676 917.230769

16 rows × 79 columns

In [13]:
df_hes_reponses
Out[13]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 11.0 0.0 11.0 11.0 11.0 11.0 11.0 11.0 11.0 11.0 ... 4.0 11.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2004 10.0 0.0 11.0 11.0 11.0 11.0 11.0 11.0 11.0 11.0 ... 2.0 11.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2005 39.0 1.0 41.0 40.0 40.0 39.0 41.0 40.0 40.0 40.0 ... 9.0 42.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2006 49.0 17.0 56.0 51.0 47.0 45.0 56.0 50.0 52.0 50.0 ... 11.0 56.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2007 51.0 17.0 56.0 53.0 51.0 50.0 57.0 52.0 54.0 52.0 ... 10.0 58.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2008 51.0 12.0 54.0 52.0 52.0 51.0 54.0 52.0 52.0 52.0 ... 8.0 55.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2009 51.0 11.0 53.0 50.0 50.0 50.0 54.0 50.0 50.0 50.0 ... 9.0 55.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2010 58.0 21.0 62.0 57.0 55.0 55.0 63.0 59.0 59.0 59.0 ... 9.0 64.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2011 54.0 18.0 57.0 55.0 55.0 55.0 57.0 55.0 55.0 55.0 ... 9.0 58.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2012 57.0 19.0 61.0 59.0 56.0 57.0 61.0 59.0 59.0 59.0 ... 11.0 62.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2013 53.0 18.0 56.0 56.0 54.0 54.0 56.0 56.0 56.0 55.0 ... 7.0 57.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2014 56.0 22.0 58.0 58.0 56.0 56.0 58.0 58.0 58.0 58.0 ... 9.0 59.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2015 56.0 18.0 60.0 60.0 58.0 59.0 60.0 60.0 60.0 59.0 ... 0.0 61.0 46.0 50.0 58.0 59.0 55.0 32.0 37.0 38.0
2016 57.0 14.0 59.0 59.0 56.0 57.0 59.0 59.0 59.0 58.0 ... 0.0 60.0 51.0 58.0 59.0 58.0 58.0 32.0 41.0 40.0
2017 56.0 16.0 61.0 61.0 60.0 60.0 61.0 61.0 61.0 61.0 ... 0.0 62.0 50.0 48.0 50.0 49.0 37.0 33.0 44.0 43.0
2018 52.0 15.0 54.0 54.0 51.0 52.0 54.0 53.0 53.0 54.0 ... 0.0 55.0 48.0 53.0 54.0 54.0 52.0 32.0 37.0 39.0

16 rows × 79 columns

In [14]:
# afficher le nom des colonnes pour tester si tout est OK
df_hes.columns
Out[14]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'D14',
       'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24',
       'D25', 'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33',
       'E34', 'E35', 'E36', 'F37', 'F38', 'F39', 'F40', 'F41', 'F42', 'F43',
       'F44', 'F45', 'F46', 'F47', 'F48', 'F49', 'F50', 'F51', 'F52', 'F53',
       'F54', 'F55', 'F56', 'G57', 'G58', 'G59', 'G60', 'G61', 'G62', 'G63',
       'G64', 'G65', 'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB',
       'F39a', 'F45a', 'F47a', 'F47b', 'F47c', 'F47d', 'G58a', 'G58b'],
      dtype='object')

Bibliothèques des hautes écoles pédagogiques

Période d'observation : 2013-2018

In [15]:
# fichier OFS pour les HEP : totaux, moyennes et réponses

# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2013,2019))
lignes = {2013 : 14, 2014 : 12, 2015 : 13, 2016 : 13, 2017 : 13, 2018 : 13}

# initialiser les 3 dataframes
df_hep = pd.DataFrame()
df_hep_moyennes = pd.DataFrame()
df_hep_reponses = pd.DataFrame()

# boucle de calculs pour chaque onglet annuel
for year in years:
    # les lignes à ignorer changent en 2015
    if year > 2015:
        df_hep_year = pd.read_excel(url_ofs_hep, header=0, encoding=sys.getfilesystemencoding(),
                                    sheet_name=str(year), skiprows=4, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_hep_year = df_hep_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    else:
        df_hep_year = pd.read_excel(url_ofs_hep, header=0, encoding=sys.getfilesystemencoding(),
                                    sheet_name=str(year), skiprows=3, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_hep_year = df_hep_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    # supprimer les 4 premières lignes
    df_hep_year = df_hep_year.iloc[4:,:]
    # garder les lignes avec code sur la première colonne
    count_year = df_hep_year['Unnamed: 0'].count()
    df_hep_year = df_hep_year.loc[df_hep_year['Unnamed: 0'].notnull()]
    # supprimer les 3 premières colonnes
    df_hep_year = df_hep_year.iloc[:,3:]
    # remplacer ... par NaN
    df_hep_year = df_hep_year.replace('...', np.nan)
    df_hep_year = df_hep_year.replace('…', np.nan)
    # corrections des scories
    # remplacer valeurs vides contenant "          " ou "0         " ou " " ou ".    " ou "."
    df_hep_year = df_hep_year.replace('0         ', 0)
    df_hep_year = df_hep_year.replace('.    ', np.nan)
    df_hep_year = df_hep_year.replace('.', np.nan)
    df_hep_year = df_hep_year.replace('          ', np.nan)
    df_hep_year = df_hep_year.replace(' ', np.nan)
    # calcul des totaux, moyennes et réoponses
    df_hep_year_tot = df_hep_year.sum()
    df_hep_year_mean = df_hep_year.mean()
    df_hep_year_reponses = df_hep_year.count()
    # ajouer l'année
    df_hep_year_tot['Année'] = year
    df_hep_year_mean['Année'] = year
    df_hep_year_reponses['Année'] = year
    # calcul du nombre de lignes
    df_hep_year_tot['NBIB'] = count_year
    df_hep_year_mean['NBIB'] = count_year
    df_hep_year_reponses['NBIB'] = count_year
    # ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et les réoponses
    df_hep = df_hep.append(df_hep_year_tot, ignore_index=True)
    df_hep_moyennes = df_hep_moyennes.append(df_hep_year_mean, ignore_index=True)
    df_hep_reponses = df_hep_reponses.append(df_hep_year_reponses, ignore_index=True)
    # test des champs
    for champ in df_hep_year.columns:
        if (df_hep_year.dtypes[champ] == 'object'):
            print (' ERROR IN ' + str(year) + ' ' + champ)
            print (df_hep_year[champ])
            
# convertir l'année en entiers et ajouter l'index sur l'année
df_hep['Année'] = df_hep['Année'].astype(int)
df_hep_moyennes['Année'] = df_hep_moyennes['Année'].astype(int)
df_hep_reponses['Année'] = df_hep_reponses['Année'].astype(int)

df_hep = df_hep.set_index('Année')
df_hep_moyennes = df_hep_moyennes.set_index('Année')
df_hep_reponses = df_hep_reponses.set_index('Année')
df_hep_reponses = df_hep_reponses.fillna(0)

# ajouter les années manquantes
df_hep.loc[2003] = np.nan
df_hep.loc[2004] = np.nan
df_hep.loc[2005] = np.nan
df_hep.loc[2006] = np.nan
df_hep.loc[2007] = np.nan
df_hep.loc[2008] = np.nan
df_hep.loc[2009] = np.nan
df_hep.loc[2010] = np.nan
df_hep.loc[2011] = np.nan
df_hep.loc[2012] = np.nan

df_hep_moyennes.loc[2003] = np.nan
df_hep_moyennes.loc[2004] = np.nan
df_hep_moyennes.loc[2005] = np.nan
df_hep_moyennes.loc[2006] = np.nan
df_hep_moyennes.loc[2007] = np.nan
df_hep_moyennes.loc[2008] = np.nan
df_hep_moyennes.loc[2009] = np.nan
df_hep_moyennes.loc[2010] = np.nan
df_hep_moyennes.loc[2011] = np.nan
df_hep_moyennes.loc[2012] = np.nan

df_hep_reponses.loc[2003] = np.nan
df_hep_reponses.loc[2004] = np.nan
df_hep_reponses.loc[2005] = np.nan
df_hep_reponses.loc[2006] = np.nan
df_hep_reponses.loc[2007] = np.nan
df_hep_reponses.loc[2008] = np.nan
df_hep_reponses.loc[2009] = np.nan
df_hep_reponses.loc[2010] = np.nan
df_hep_reponses.loc[2011] = np.nan
df_hep_reponses.loc[2012] = np.nan

df_hep
Out[15]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2013 27475.0 132627.0 85.50 63.90 14.149 7.40 142.0 34.0 76.0 32.0 ... 1233.0 10.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 24449.0 47109.0 72.40 61.25 2.750 8.40 123.0 25.0 72.0 26.0 ... 2774.0 8.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 27006.0 136948.0 84.33 69.25 5.650 9.43 142.0 28.0 77.0 35.0 ... NaN 9.0 0.0 88347.0 627.0 359452.0 189821.0 18920177.0 207.0 1829.0
2016 28436.0 41405.0 87.44 71.64 5.050 10.75 142.0 30.0 71.0 41.0 ... NaN 9.0 0.0 100215.0 651.0 465902.0 261340.0 1579379.0 221.0 2870.0
2017 29639.0 112339.0 88.13 72.09 4.710 11.33 143.0 27.0 77.0 39.0 ... NaN 9.0 0.0 142085.0 639.0 564145.0 241204.0 21435528.0 318.0 4328.0
2018 28578.0 140083.0 89.82 73.25 3.900 12.67 141.0 26.0 77.0 38.0 ... NaN 9.0 0.0 157151.0 624.0 630582.0 707843.0 23393458.0 459.0 6102.0
2003 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2009 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2010 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2011 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2012 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

16 rows × 79 columns

In [16]:
df_hep_moyennes
Out[16]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2013 2747.500000 44209.000000 8.550000 6.390000 1.414900 0.740000 14.200000 3.400000 7.600000 3.200000 ... 616.5 10.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 3056.125000 23554.500000 9.050000 7.656250 0.343750 1.050000 15.375000 3.125000 9.000000 3.250000 ... 693.5 8.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 3000.666667 45649.333333 9.370000 7.694444 0.627778 1.047778 15.777778 3.111111 8.555556 3.888889 ... NaN 9.0 0.0 11043.375000 69.666667 39939.111111 21091.222222 2.702882e+06 41.400000 457.250000
2016 3159.555556 20702.500000 9.715556 7.960000 0.561111 1.194444 15.777778 3.333333 7.888889 4.555556 ... NaN 9.0 0.0 11135.000000 72.333333 51766.888889 29037.777778 1.754866e+05 36.833333 478.333333
2017 3293.222222 37446.333333 9.792222 8.010000 0.523333 1.258889 15.888889 3.000000 8.555556 4.333333 ... NaN 9.0 0.0 15787.222222 71.000000 62682.777778 26800.444444 2.381725e+06 45.428571 618.285714
2018 3175.333333 46694.333333 9.980000 8.138889 0.433333 1.407778 15.666667 2.888889 8.555556 4.222222 ... NaN 9.0 0.0 17461.222222 69.333333 70064.666667 78649.222222 3.898910e+06 57.375000 762.750000
2003 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2009 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2010 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2011 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2012 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

16 rows × 79 columns

In [17]:
df_hep_reponses
Out[17]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2013 10.0 3.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 ... 2.0 10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2014 8.0 2.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 8.0 ... 4.0 8.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2015 9.0 3.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 ... 0.0 9.0 8.0 8.0 9.0 9.0 9.0 7.0 5.0 4.0
2016 9.0 2.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 ... 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 6.0 6.0
2017 9.0 3.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 ... 0.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 7.0 7.0
2018 9.0 3.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 ... 0.0 9.0 9.0 9.0 9.0 9.0 9.0 6.0 8.0 8.0
2003 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2009 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2010 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2011 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2012 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

16 rows × 79 columns

In [18]:
# afficher le nom des colonnes pour tester si tout est OK
df_hep.columns
Out[18]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'D14',
       'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24',
       'D25', 'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33',
       'E34', 'E35', 'E36', 'F37', 'F38', 'F39', 'F40', 'F41', 'F42', 'F43',
       'F44', 'F45', 'F46', 'F47', 'F48', 'F49', 'F50', 'F51', 'F52', 'F53',
       'F54', 'F55', 'F56', 'G57', 'G58', 'G59', 'G60', 'G61', 'G62', 'G63',
       'G64', 'G65', 'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB',
       'F39a', 'F45a', 'F47a', 'F47b', 'F47c', 'F47d', 'G58a', 'G58b'],
      dtype='object')

Bibliothèques à vocation nationale

Période d'observation : 2003-2018

In [19]:
# fichier OFS pour la BN : totaux, moyenne (= total) et réponses

# liste d'onglets à lire sur Excel
years = list(range(2003,2019))

# initialiser les 2 dataframes (les moyennes sont égales aux totaux)
df_bn = pd.DataFrame()
df_bn_reponses = pd.DataFrame()

# boucle de calculs pour chaque onglet annuel
for year in years:
    # les lignes à ignorer changent en 2015
    if year > 2015:
        df_bn_year = pd.read_excel(url_ofs_bn, header=0, encoding=sys.getfilesystemencoding(),
                                   sheet_name=str(year), skiprows=4, nrows=1)
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_bn_year = df_bn_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    else:
        df_bn_year = pd.read_excel(url_ofs_bn, header=0, encoding=sys.getfilesystemencoding(),
                                   sheet_name=str(year), skiprows=3, nrows=1)
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_bn_year = df_bn_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    # supprimer les 3 premières colonnes
    df_bn_year = df_bn_year.iloc[:,3:]
    # remplacer ... par NaN
    df_bn_year = df_bn_year.replace('...', np.nan)
    df_bn_year = df_bn_year.replace('…', np.nan)
    # corrections des scories
    # remplacer valeurs vides contenant "          " ou "0         " ou " " ou ".    " ou "."
    df_bn_year = df_bn_year.replace('0         ', 0)
    df_bn_year = df_bn_year.replace('0', 0)
    df_bn_year = df_bn_year.replace('.    ', np.nan)
    df_bn_year = df_bn_year.replace('.', np.nan)
    df_bn_year = df_bn_year.replace('..', np.nan)
    df_bn_year = df_bn_year.replace('….', np.nan)
    df_bn_year = df_bn_year.replace('          ', np.nan)
    df_bn_year = df_bn_year.replace(' ', np.nan)
    # ajouer l'année
    df_bn_year['Année'] = year
    # ajout de la ligne annuelle
    df_bn = pd.concat([df_bn, df_bn_year], sort=True)
    
# ajouter l'index sur l'année
df_bn = df_bn.set_index('Année')
df_bn['NBIB'] = 1

# ajout du df pour la moyenne
df_bn_moyennes = df_bn

# calcul des réponses non vides
df_bn_reponses = df_bn/df_bn
df_bn_reponses = df_bn_reponses.fillna(0)

df_bn
Out[19]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G64 G65 G66 G67 G68 G69 G70 G71 G72 NBIB
Année
2003 4227 135629 125.35 118.20 3.15 4.0 153 65 81 7 ... NaN NaN NaN NaN 61589 NaN 178186 25067.0 900.0 1
2004 4096 146139 127.00 118.00 5.00 4.0 163 66 85 12 ... NaN NaN NaN NaN 90304 NaN 129345 13153.0 7500.0 1
2005 3489 144587 109.36 104.46 4.90 0.0 153 61 83 9 ... NaN NaN NaN NaN 129926 NaN 240000 11042.0 NaN 1
2006 3708 144587 126.00 115.00 3.00 8.0 165 68 88 9 ... NaN NaN NaN NaN 1829460 0.0 205603 16496.0 6260.0 1
2007 3409 143144 136.20 123.50 6.70 6.0 174 70 90 14 ... NaN NaN NaN NaN 1386243 0.0 290821 29988.0 10166.0 1
2008 4491 150320 136.90 121.20 9.65 6.0 180 61 106 13 ... NaN 66700.0 450.0 NaN 1472943 0.0 388997 38529.0 8319.0 1
2009 3675 142693 141.20 129.40 5.75 6.0 185 62 110 13 ... NaN 49500.0 2180.0 NaN 1255394 0.0 463168 39883.0 NaN 1
2010 4280 141500 136.40 125.20 6.20 5.0 182 58 113 11 ... NaN 47450.0 2490.0 NaN 114703 0.0 294337 45187.0 NaN 1
2011 4165 120504 135.50 126.70 4.80 4.0 178 54 115 9 ... NaN 40640.0 2140.0 NaN 77811 0.0 376287 325299.0 NaN 1
2012 4182 104534 133.40 124.35 4.00 5.0 165 48 105 12 ... NaN 38815.0 1885.0 NaN 76149 0.0 573003 163911.0 NaN 1
2013 5178 113008 131.40 124.35 2.00 5.0 166 48 108 10 ... NaN 34000.0 760.0 NaN 69460 0.0 579054 172248.0 NaN 1
2014 4305 118551 126.00 124.10 1.90 0.0 169 46 112 11 ... NaN 41876.0 2204.0 NaN 70377 0.0 527204 347126.0 NaN 1
2015 6247 98958 124.70 121.70 3.00 NaN 167 43 113 11 ... NaN 18867.0 993.0 NaN 54413 NaN 515249 NaN NaN 1
2016 6187 104341 146.10 145.40 0.70 NaN 192 54 125 13 ... NaN 16701.0 879.0 NaN 34762 NaN 527464 NaN NaN 1
2017 6262 88516 146.50 145.00 1.50 NaN 191 54 127 10 ... NaN 25213.0 1327.0 NaN 26845 NaN 473524 NaN NaN 1
2018 6484 80991 145.20 144.40 0.80 NaN 189 58 121 10 ... NaN 47500.0 2500.0 NaN 34414 NaN 183655 NaN NaN 1

16 rows × 79 columns

In [20]:
df_bn_reponses
Out[20]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G64 G65 G66 G67 G68 G69 G70 G71 G72 NBIB
Année
2003 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0
2004 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0
2005 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
2006 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0
2007 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0
2008 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0
2009 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
2010 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
2011 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
2012 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
2013 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
2014 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
2015 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
2016 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
2017 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0
2018 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 ... 0.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 0.0 1.0

16 rows × 79 columns

In [21]:
# afficher le nom des colonnes pour tester si tout est OK
df_bn.columns
Out[21]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'D14',
       'D15', 'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24',
       'D25', 'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33',
       'E34', 'E35', 'E36', 'F37', 'F38', 'F39', 'F39a', 'F40', 'F41', 'F42',
       'F43', 'F44', 'F45', 'F45a', 'F46', 'F47', 'F47a', 'F47b', 'F47c',
       'F47d', 'F48', 'F49', 'F50', 'F51', 'F52', 'F53', 'F54', 'F55', 'F56',
       'G57', 'G58', 'G58a', 'G58b', 'G59', 'G60', 'G61', 'G62', 'G63', 'G64',
       'G65', 'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB'],
      dtype='object')

Bibliothèques publiques des villes (communes dès 10'000 habitants)

Période d'observation : 2003-2018

In [22]:
# fichier OFS pour les Villes de plus de 10'000 habitants : totaux, moyennes et réponses

# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 59, 2004 : 57, 2005 : 104, 2006 : 99, 2007 : 105, 2008 : 115, 2009 : 118, 2010 : 123,
        2011 : 119, 2012 : 122, 2013 : 123, 2014 : 123, 2015 : 123, 2016 : 127, 2017 : 125, 2018 : 127}

# initialiser les 3 dataframes
df_villes = pd.DataFrame()
df_villes_moyennes = pd.DataFrame()
df_villes_reponses = pd.DataFrame()

# boucle de calculs pour chaque onglet annuel
for year in years:
    # les lignes à ignorer changent en 2015
    if year > 2015:
        df_villes_year = pd.read_excel(url_ofs_villes, header=0, encoding=sys.getfilesystemencoding(),
                                       sheet_name=str(year), skiprows=4, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_villes_year = df_villes_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    else:
        df_villes_year = pd.read_excel(url_ofs_villes, header=0, encoding=sys.getfilesystemencoding(),
                                       sheet_name=str(year), skiprows=3, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_villes_year = df_villes_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    # supprimer les 4 premières lignes
    df_villes_year = df_villes_year.iloc[4:,:]
    # garder les lignes avec code sur la première colonne
    count_year = df_villes_year['Unnamed: 0'].count()
    df_villes_year = df_villes_year.loc[df_villes_year['Unnamed: 0'].notnull()]
    # supprimer les 3 premières colonnes
    df_villes_year = df_villes_year.iloc[:,3:]
    # remplacer ... par NaN
    df_villes_year = df_villes_year.replace('...', np.nan)
    df_villes_year = df_villes_year.replace('…', np.nan)
    # corrections des scories
    # lignes de 2018 CD1 : "672...8" et "1757...5"
    df_villes_year = df_villes_year.replace('672...8', 672.8)
    df_villes_year = df_villes_year.replace('1757...5', 1757.5)
    # remplacer valeurs vides contenant "          " ou "0         " ou " " ou ".    " ou "."
    df_villes_year = df_villes_year.replace('0         ', 0)
    df_villes_year = df_villes_year.replace('0', 0)
    df_villes_year = df_villes_year.replace('.    ', np.nan)
    df_villes_year = df_villes_year.replace('.', np.nan)
    df_villes_year = df_villes_year.replace('..', np.nan)
    df_villes_year = df_villes_year.replace('….', np.nan)
    df_villes_year = df_villes_year.replace('          ', np.nan)
    df_villes_year = df_villes_year.replace(' ', np.nan)
    # calcul des totaux, moyennes et réponses
    df_villes_year_tot = df_villes_year.sum()
    df_villes_year_mean = df_villes_year.mean()
    df_villes_year_reponses = df_villes_year.count()
    # ajouer l'année
    df_villes_year_tot['Année'] = year
    df_villes_year_mean['Année'] = year
    df_villes_year_reponses['Année'] = year
    # calcul du nombre de lignes
    df_villes_year_tot['NBIB'] = count_year
    df_villes_year_mean['NBIB'] = count_year
    df_villes_year_reponses['NBIB'] = count_year
    # ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
    df_villes = df_villes.append(df_villes_year_tot, ignore_index=True)
    df_villes_moyennes = df_villes_moyennes.append(df_villes_year_mean, ignore_index=True)
    df_villes_reponses = df_villes_reponses.append(df_villes_year_reponses, ignore_index=True)
    # test des champs
    for champ in df_villes_year.columns:
        if (df_villes_year.dtypes[champ] == 'object'):
            print (' ERROR IN ' + str(year) + ' ' + champ)
            print (df_villes_year[champ])
            
# convertir l'année en entiers et ajouter l'index sur l'année
df_villes['Année'] = df_villes['Année'].astype(int)
df_villes_moyennes['Année'] = df_villes_moyennes['Année'].astype(int)
df_villes_reponses['Année'] = df_villes_reponses['Année'].astype(int)

df_villes = df_villes.set_index('Année')
df_villes_moyennes = df_villes_moyennes.set_index('Année')
df_villes_reponses = df_villes_reponses.set_index('Année')
df_villes_reponses = df_villes_reponses.fillna(0)

# supprimer les 4 colonnes vides de fin ajoutées à cause de "." à la fin du tableau de 2017
del df_villes['Unnamed: 84']
del df_villes['Unnamed: 85']
del df_villes['Unnamed: 86']
del df_villes['Unnamed: 87']

del df_villes_moyennes['Unnamed: 84']
del df_villes_moyennes['Unnamed: 85']
del df_villes_moyennes['Unnamed: 86']
del df_villes_moyennes['Unnamed: 87']

del df_villes_reponses['Unnamed: 84']
del df_villes_reponses['Unnamed: 85']
del df_villes_reponses['Unnamed: 86']
del df_villes_reponses['Unnamed: 87']

df_villes
Out[22]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 514644.0 3853126.0 756.85600 627.3960 75.230 55.230 1229.0 293.0 520.0 416.0 ... 785.0 55.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 493138.0 4875485.0 742.46576 614.0257 66.440 61.900 1235.0 285.0 502.0 463.0 ... 573.0 53.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 591972.0 6018038.0 893.45800 642.0000 77.900 55.350 1613.0 302.0 566.0 430.0 ... 304.0 100.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 546236.0 6679457.0 971.89000 715.9250 94.105 64.710 1693.0 356.0 637.0 406.0 ... 4748.0 95.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 585447.0 6370343.0 948.39000 717.8200 68.965 48.150 1678.0 289.0 660.0 403.0 ... 8707.0 101.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 634965.0 6886416.0 1025.29000 751.4400 75.560 63.170 1776.0 323.0 661.0 407.0 ... 22054.0 111.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 612204.0 8517319.0 1061.16300 774.8000 80.870 67.520 1830.0 353.0 699.0 383.0 ... 28509.0 114.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 611370.0 8372205.0 1082.16900 794.3400 80.515 58.290 1870.0 351.0 715.0 404.0 ... 34901.0 119.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 596211.0 8353480.0 1068.75000 727.5290 61.410 63.400 1878.0 293.0 681.0 447.0 ... 34996.0 115.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 613425.0 8149803.0 1173.85000 825.3950 124.895 72.660 2008.0 370.0 792.0 469.0 ... 55434.0 118.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 591339.0 8414347.0 1169.68000 752.1400 105.380 70.036 2026.0 328.0 804.0 439.7 ... 74573.0 119.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 580918.0 7674730.0 1147.61000 764.1500 88.285 59.906 2004.0 361.0 837.0 437.0 ... 67583.0 119.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 569318.0 7900878.0 1155.61500 850.1100 86.035 65.140 2025.0 374.0 849.0 424.0 ... NaN 119.0 2274.0 24418.0 49724.0 2871654.0 628034.0 87775.0 5102.0 78490.0
2016 630291.0 8177372.0 1139.81000 828.4400 79.840 68.870 2023.0 346.0 853.0 422.0 ... NaN 123.0 2593.0 42704.0 138077.0 3496333.0 866390.0 619091.0 6493.0 134025.0
2017 606099.0 7170714.0 1083.80000 795.4000 55.690 66.870 1915.0 308.0 795.0 413.0 ... NaN 121.0 2586.0 62156.0 11923.0 4588700.0 2918797.0 1221373.0 6772.0 123289.0
2018 630612.0 7752247.0 1146.69000 854.2700 53.940 69.940 2023.0 341.0 860.0 419.0 ... NaN 123.0 2633.0 83569.0 12289.0 8546343.0 17117957.0 1349236.0 6677.0 138929.0

16 rows × 87 columns

In [23]:
df_villes_moyennes
Out[23]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 9530.444444 160546.916667 13.761018 11.407200 1.367818 1.022778 22.345455 5.327273 9.454545 7.563636 ... 17.840909 55.0 NaN NaN NaN NaN NaN NaN NaN NaN
2004 9669.372549 162516.166667 14.008788 11.585391 1.253585 1.167925 23.301887 5.377358 9.471698 8.735849 ... 15.078947 53.0 NaN NaN NaN NaN NaN NaN NaN NaN
2005 6166.375000 130826.913043 8.934580 12.346154 1.498077 1.064423 16.130000 5.807692 10.884615 8.269231 ... 7.794872 100.0 NaN NaN NaN NaN NaN NaN NaN NaN
2006 6069.288889 115163.051724 10.450430 14.318500 2.045761 1.376809 17.821053 7.265306 13.000000 8.120000 ... 131.888889 95.0 NaN NaN NaN NaN NaN NaN NaN NaN
2007 6098.406250 107971.915254 9.483900 13.804231 1.436771 1.003125 16.613861 5.666667 12.941176 7.901961 ... 217.675000 101.0 NaN NaN NaN NaN NaN NaN NaN NaN
2008 5990.235849 105944.861538 9.320818 13.915556 1.399259 1.169815 16.000000 6.094340 12.471698 7.679245 ... 565.487179 111.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 5616.550459 133083.109375 9.308447 14.348148 1.585686 1.298462 16.052632 6.660377 13.188679 7.226415 ... 678.785714 114.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 5225.384615 110160.592105 9.093857 14.442545 1.519151 1.099811 15.714286 6.267857 12.767857 7.214286 ... 830.976190 119.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 5229.921053 117654.647887 9.293478 13.472759 1.137222 1.174074 16.330435 5.232143 12.160714 7.982143 ... 744.595745 115.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 5198.516949 105841.597403 9.947881 14.480614 2.230268 1.297500 17.016949 6.379310 13.655172 8.086207 ... 1108.680000 118.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 4969.235294 103880.827160 9.829244 12.967931 1.816897 1.228702 17.025210 5.754386 14.105263 7.581034 ... 1553.604167 119.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 4965.111111 99671.818182 9.643782 12.325000 1.447295 0.966226 16.840336 5.730159 13.285714 6.828125 ... 1469.195652 119.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 5083.196429 96352.170732 9.711050 13.711452 1.387661 1.067869 17.016807 6.032258 13.693548 6.838710 ... NaN 119.0 46.408163 251.731959 534.666667 27091.075472 6157.196078 1908.152174 76.149254 1226.406250
2016 5252.425000 95085.720930 9.419917 13.580984 1.353220 1.187414 16.581967 5.580645 13.758065 6.806452 ... NaN 123.0 47.145455 395.407407 1278.490741 31217.258929 7948.532110 11680.962264 76.388235 1763.486842
2017 5093.268908 88527.333333 9.031667 13.256667 0.928167 1.114500 15.958333 5.133333 13.250000 6.883333 ... NaN 121.0 48.792453 565.054545 111.429907 39901.739130 27025.898148 23044.773585 81.590361 1560.620253
2018 5255.100000 92288.654762 9.555750 13.778548 0.884262 1.128065 16.581967 5.500000 13.870968 6.758065 ... NaN 123.0 49.679245 752.873874 117.038095 74967.921053 151486.345133 24093.500000 79.488095 1673.843373

16 rows × 87 columns

In [24]:
df_villes_reponses
Out[24]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2003 54.0 24.0 55.0 55.0 55.0 54.0 55.0 55.0 55.0 55.0 ... 44.0 55.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2004 51.0 30.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 53.0 ... 38.0 53.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2005 96.0 46.0 100.0 52.0 52.0 52.0 100.0 52.0 52.0 52.0 ... 39.0 100.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2006 90.0 58.0 93.0 50.0 46.0 47.0 95.0 49.0 49.0 50.0 ... 36.0 95.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2007 96.0 59.0 100.0 52.0 48.0 48.0 101.0 51.0 51.0 51.0 ... 40.0 101.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2008 106.0 65.0 110.0 54.0 54.0 54.0 111.0 53.0 53.0 53.0 ... 39.0 111.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2009 109.0 64.0 114.0 54.0 51.0 52.0 114.0 53.0 53.0 53.0 ... 42.0 114.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2010 117.0 76.0 119.0 55.0 53.0 53.0 119.0 56.0 56.0 56.0 ... 42.0 119.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2011 114.0 71.0 115.0 54.0 54.0 54.0 115.0 56.0 56.0 56.0 ... 47.0 115.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2012 118.0 77.0 118.0 57.0 56.0 56.0 118.0 58.0 58.0 58.0 ... 50.0 118.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2013 119.0 81.0 119.0 58.0 58.0 57.0 119.0 57.0 57.0 58.0 ... 48.0 119.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2014 117.0 77.0 119.0 62.0 61.0 62.0 119.0 63.0 63.0 64.0 ... 46.0 119.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2015 112.0 82.0 119.0 62.0 62.0 61.0 119.0 62.0 62.0 62.0 ... 0.0 119.0 49.0 97.0 93.0 106.0 102.0 46.0 67.0 64.0
2016 120.0 86.0 121.0 61.0 59.0 58.0 122.0 62.0 62.0 62.0 ... 0.0 123.0 55.0 108.0 108.0 112.0 109.0 53.0 85.0 76.0
2017 119.0 81.0 120.0 60.0 60.0 60.0 120.0 60.0 60.0 60.0 ... 0.0 121.0 53.0 110.0 107.0 115.0 108.0 53.0 83.0 79.0
2018 120.0 84.0 120.0 62.0 61.0 62.0 122.0 62.0 62.0 62.0 ... 0.0 123.0 53.0 111.0 105.0 114.0 113.0 56.0 84.0 83.0

16 rows × 87 columns

In [25]:
# afficher le nom des colonnes pour tester si tout est OK
df_villes.columns
Out[25]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'CB1',
       'CD1', 'CD2', 'CG1', 'CG11', 'CG12', 'CG13', 'CG14', 'D14', 'D15',
       'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24', 'D25',
       'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33', 'E34',
       'E35', 'E36', 'F37', 'F38', 'F39', 'F40', 'F41', 'F42', 'F43', 'F44',
       'F45', 'F46', 'F47', 'F48', 'F49', 'F50', 'F51', 'F52', 'F53', 'F54',
       'F55', 'F56', 'G57', 'G58', 'G59', 'G60', 'G61', 'G62', 'G63', 'G64',
       'G65', 'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB', 'F39a',
       'F45a', 'F47a', 'F47b', 'F47c', 'F47d', 'G58a', 'G58b'],
      dtype='object')

Bibliothèques publiques communales et mixtes (communales et scolaires) des communes en dessous de 10'000 habitants

Période d'observation : 2008-2018

In [26]:
# fichier OFS pour les Communes : totaux, moyennes et réponses

# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2008,2019))
lignes = {2008 : 406, 2009 : 394, 2010 : 410, 2011 : 469, 2012 : 472, 2013 : 486,
          2014 : 525, 2015 : 531, 2016 : 532, 2017 : 535, 2018 : 542}

# initialiser les 3 dataframes
df_communes = pd.DataFrame()
df_communes_moyennes = pd.DataFrame()
df_communes_reponses = pd.DataFrame()

# boucle de calculs pour chaque onglet annuel
for year in years:
    # les lignes à ignorer changent en 2015
    if year > 2015:
        df_communes_year = pd.read_excel(url_ofs_communes, header=0, encoding=sys.getfilesystemencoding(),
                                         sheet_name=str(year), skiprows=4, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_communes_year = df_communes_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    else:
        df_communes_year = pd.read_excel(url_ofs_communes, header=0, encoding=sys.getfilesystemencoding(),
                                         sheet_name=str(year), skiprows=3, nrows=lignes[year])
        # renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
        df_communes_year = df_communes_year.rename(columns={'E26 (E27+E28)' : 'E26',
                                                    'E28 (E28b+E29+ E30+E31)' : 'E28',
                                                    'E28 (E29+ E30+E31)' : 'E28',
                                                    'F45 1)' : 'F45'})
    # supprimer les 4 premières lignes
    df_communes_year = df_communes_year.iloc[4:,:]
    # garder les lignes avec code sur la première colonne
    count_year = df_communes_year['Unnamed: 0'].count()
    df_communes_year = df_communes_year.loc[df_communes_year['Unnamed: 0'].notnull()]
    # supprimer les 4 premières colonnes
    df_communes_year = df_communes_year.iloc[:,4:]
    # remplacer ... par NaN
    df_communes_year = df_communes_year.replace('...', np.nan)
    df_communes_year = df_communes_year.replace('…', np.nan)
    # corrections des scories
    # remplacer valeurs vides contenant "          " ou "0         " ou " " ou ".    " ou "."
    df_communes_year = df_communes_year.replace('0         ', 0)
    df_communes_year = df_communes_year.replace('0', 0)
    df_communes_year = df_communes_year.replace('.    ', np.nan)
    df_communes_year = df_communes_year.replace('.', np.nan)
    df_communes_year = df_communes_year.replace('..', np.nan)
    df_communes_year = df_communes_year.replace('….', np.nan)
    df_communes_year = df_communes_year.replace(' …', np.nan)
    df_communes_year = df_communes_year.replace('.........', np.nan)
    df_communes_year = df_communes_year.replace('          ', np.nan)
    df_communes_year = df_communes_year.replace(' ', np.nan)
    # convertir le reste en nombres
    # for champ in df_communes_year.columns:
    #     df_communes_year[champ] = pd.to_numeric(df_communes_year[champ])
    # calcul des totaux, moyennes et réponses
    df_communes_year_tot = df_communes_year.sum()
    df_communes_year_mean = df_communes_year.mean()
    df_communes_year_reponses = df_communes_year.count()
    # ajouer l'année
    df_communes_year_tot['Année'] = year
    df_communes_year_mean['Année'] = year
    df_communes_year_reponses['Année'] = year
    # calcul du nombre de lignes
    df_communes_year_tot['NBIB'] = count_year
    df_communes_year_mean['NBIB'] = count_year
    df_communes_year_reponses['NBIB'] = count_year
    # ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
    df_communes = df_communes.append(df_communes_year_tot, ignore_index=True)
    df_communes_moyennes = df_communes_moyennes.append(df_communes_year_mean, ignore_index=True)
    df_communes_reponses = df_communes_reponses.append(df_communes_year_reponses, ignore_index=True)
    # test des champs
    for champ in df_communes_year.columns:
        if (df_communes_year.dtypes[champ] == 'object'):
            print (' ERROR IN ' + str(year) + ' ' + champ)
            print (df_communes_year[champ])
            
# convertir l'année en entiers et ajouter l'index sur l'année
df_communes['Année'] = df_communes['Année'].astype(int)
df_communes_moyennes['Année'] = df_communes_moyennes['Année'].astype(int)
df_communes_reponses['Année'] = df_communes_reponses['Année'].astype(int)

df_communes = df_communes.set_index('Année')
df_communes_moyennes = df_communes_moyennes.set_index('Année')
df_communes_reponses = df_communes_reponses.set_index('Année')
df_communes_reponses = df_communes_reponses.fillna(0)

# ajouter les lignes pour 2003 - 2007
df_communes.loc[2003] = np.nan
df_communes.loc[2004] = np.nan
df_communes.loc[2005] = np.nan
df_communes.loc[2006] = np.nan
df_communes.loc[2007] = np.nan

df_communes_moyennes.loc[2003] = np.nan
df_communes_moyennes.loc[2004] = np.nan
df_communes_moyennes.loc[2005] = np.nan
df_communes_moyennes.loc[2006] = np.nan
df_communes_moyennes.loc[2007] = np.nan

df_communes_reponses.loc[2003] = np.nan
df_communes_reponses.loc[2004] = np.nan
df_communes_reponses.loc[2005] = np.nan
df_communes_reponses.loc[2006] = np.nan
df_communes_reponses.loc[2007] = np.nan

df_communes
Out[26]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2008 317765.0 1116486.0 316.2310 0.0 0.0 0.0 1848.0 0.0 0.0 0.0 ... 0.0 402.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 308344.0 1109587.0 317.3920 0.0 0.0 0.0 1777.0 0.0 0.0 0.0 ... 0.0 390.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 311114.0 1353180.0 304.5790 0.0 0.0 0.0 1804.0 0.0 0.0 0.0 ... 0.0 406.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 384379.0 1573874.0 351.2334 0.0 0.0 0.0 2145.0 0.0 0.0 0.0 ... 0.0 465.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 356847.0 2453513.0 362.2864 0.0 0.0 0.0 2157.0 0.0 0.0 0.0 ... 0.0 468.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 355904.0 2746419.0 373.9560 0.0 0.0 0.0 2208.0 0.0 0.0 0.0 ... 0.0 482.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 356645.0 2805928.0 403.4660 0.0 0.0 0.0 2471.0 0.0 0.0 0.0 ... 0.0 521.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 365823.0 2935506.0 411.5060 0.0 0.0 0.0 2539.0 0.0 0.0 0.0 ... NaN 527.0 0.0 18461.0 198623.0 3527401.0 1447716.0 0.0 8181.0 61052.0
2016 337980.0 3105888.0 407.7550 0.0 0.0 0.0 2513.0 0.0 0.0 0.0 ... NaN 527.0 0.0 58966.0 163111.0 3822119.0 1841141.0 0.0 9413.0 66218.0
2017 348666.0 3251049.0 424.6410 0.0 0.0 0.0 2501.0 0.0 0.0 0.0 ... NaN 530.0 0.0 60329.0 177657.0 4029802.0 1867563.0 0.0 10816.0 84043.0
2018 358858.0 3358817.0 434.5010 0.0 0.0 0.0 2527.0 0.0 0.0 0.0 ... NaN 537.0 0.0 76955.0 71665.0 4656628.0 1935963.0 0.0 11750.0 100487.0
2003 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

16 rows × 87 columns

In [27]:
df_communes_moyennes
Out[27]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2008 825.363636 6379.920000 0.906106 NaN NaN NaN 4.631579 NaN NaN NaN ... NaN 402.0 NaN NaN NaN NaN NaN NaN NaN NaN
2009 820.063830 6413.797688 0.917318 NaN NaN NaN 4.568123 NaN NaN NaN ... NaN 390.0 NaN NaN NaN NaN NaN NaN NaN NaN
2010 789.629442 6939.384615 0.832183 NaN NaN NaN 4.454321 NaN NaN NaN ... NaN 406.0 NaN NaN NaN NaN NaN NaN NaN NaN
2011 856.077951 8993.565714 0.798258 NaN NaN NaN 4.612903 NaN NaN NaN ... NaN 465.0 NaN NaN NaN NaN NaN NaN NaN NaN
2012 777.444444 11254.646789 0.814127 NaN NaN NaN 4.608974 NaN NaN NaN ... NaN 468.0 NaN NaN NaN NaN NaN NaN NaN NaN
2013 752.439746 10941.908367 0.812948 NaN NaN NaN 4.580913 NaN NaN NaN ... NaN 482.0 NaN NaN NaN NaN NaN NaN NaN NaN
2014 711.866267 10628.515152 0.845841 NaN NaN NaN 4.779497 NaN NaN NaN ... NaN 521.0 NaN NaN NaN NaN NaN NaN NaN NaN
2015 727.282306 11422.202335 0.838098 NaN NaN NaN 4.826996 NaN NaN NaN ... NaN 527.0 NaN 42.439080 469.557920 7908.970852 3305.287671 NaN 23.576369 194.433121
2016 669.267327 11013.787234 0.823747 NaN NaN NaN 4.777567 NaN NaN NaN ... NaN 527.0 NaN 126.265525 379.327907 8272.984848 3993.798265 NaN 22.736715 179.452575
2017 685.001965 11171.989691 0.854408 NaN NaN NaN 4.718868 NaN NaN NaN ... NaN 530.0 NaN 128.908120 404.685649 8574.046809 3990.519231 NaN 25.813842 227.758808
2018 699.528265 11703.195122 0.872492 NaN NaN NaN 4.714552 NaN NaN NaN ... NaN 537.0 NaN 158.670103 157.852423 9782.831933 3991.676289 NaN 26.826484 253.115869
2003 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

16 rows × 87 columns

In [28]:
df_communes_reponses
Out[28]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G72 NBIB F39a F45a F47a F47b F47c F47d G58a G58b
Année
2008 385.0 175.0 349.0 0.0 0.0 0.0 399.0 0.0 0.0 0.0 ... 0.0 402.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2009 376.0 173.0 346.0 0.0 0.0 0.0 389.0 0.0 0.0 0.0 ... 0.0 390.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2010 394.0 195.0 366.0 0.0 0.0 0.0 405.0 0.0 0.0 0.0 ... 0.0 406.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2011 449.0 175.0 440.0 0.0 0.0 0.0 465.0 0.0 0.0 0.0 ... 0.0 465.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2012 459.0 218.0 445.0 0.0 0.0 0.0 468.0 0.0 0.0 0.0 ... 0.0 468.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2013 473.0 251.0 460.0 0.0 0.0 0.0 482.0 0.0 0.0 0.0 ... 0.0 482.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2014 501.0 264.0 477.0 0.0 0.0 0.0 517.0 0.0 0.0 0.0 ... 0.0 521.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2015 503.0 257.0 491.0 0.0 0.0 0.0 526.0 0.0 0.0 0.0 ... 0.0 527.0 0.0 435.0 423.0 446.0 438.0 0.0 347.0 314.0
2016 505.0 282.0 495.0 0.0 0.0 0.0 526.0 0.0 0.0 0.0 ... 0.0 527.0 0.0 467.0 430.0 462.0 461.0 0.0 414.0 369.0
2017 509.0 291.0 497.0 0.0 0.0 0.0 530.0 0.0 0.0 0.0 ... 0.0 530.0 0.0 468.0 439.0 470.0 468.0 0.0 419.0 369.0
2018 513.0 287.0 498.0 0.0 0.0 0.0 536.0 0.0 0.0 0.0 ... 0.0 537.0 0.0 485.0 454.0 476.0 485.0 0.0 438.0 397.0
2003 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2004 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

16 rows × 87 columns

In [29]:
# afficher le nom des colonnes
df_communes.columns
Out[29]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'CB1',
       'CD1', 'CD2', 'CG1', 'CG11', 'CG12', 'CG13', 'CG14', 'D14', 'D15',
       'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24', 'D25',
       'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33', 'E34',
       'E35', 'E36', 'F37', 'F38', 'F39', 'F40', 'F41', 'F42', 'F43', 'F44',
       'F45', 'F46', 'F47', 'F48', 'F49', 'F50', 'F51', 'F52', 'F53', 'F54',
       'F55', 'F56', 'G57', 'G58', 'G59', 'G60', 'G61', 'G62', 'G63', 'G64',
       'G65', 'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB', 'F39a',
       'F45a', 'F47a', 'F47b', 'F47c', 'F47d', 'G58a', 'G58b'],
      dtype='object')

Dataframe global

In [30]:
# export Excel des dataframes individuels
df_unis.to_excel('results/export_ofs_bibliotheques_universitaires.xlsx')
df_unis_moyennes.to_excel('results/export_ofs_bibliotheques_universitaires_moyennes.xlsx')
df_unis_reponses.to_excel('results/export_ofs_bibliotheques_universitaires_reponses.xlsx')

df_unis_reseaux.to_excel('results/export_ofs_reseaux_bibliotheques_universites.xlsx')
df_unis_reseaux_moyennes.to_excel('results/export_ofs_reseaux_bibliotheques_universites_moyennes.xlsx')
df_unis_reseaux_reponses.to_excel('results/export_ofs_reseaux_bibliotheques_universites_reponses.xlsx')

df_hes.to_excel('results/export_ofs_bibliotheques_hes.xlsx')
df_hes_moyennes.to_excel('results/export_ofs_bibliotheques_hes_moyennes.xlsx')
df_hes_reponses.to_excel('results/export_ofs_bibliotheques_hes_reponses.xlsx')

df_hep.to_excel('results/export_ofs_bibliotheques_hep.xlsx')
df_hep_moyennes.to_excel('results/export_ofs_bibliotheques_hep_moyennes.xlsx')
df_hep_reponses.to_excel('results/export_ofs_bibliotheques_hep_reponses.xlsx')

df_bn.to_excel('results/export_ofs_bibliotheque_nationale.xlsx')
df_bn_moyennes.to_excel('results/export_ofs_bibliotheque_nationale_moyennes.xlsx')
df_bn_reponses.to_excel('results/export_ofs_bibliotheque_nationale_reponses.xlsx')

df_villes.to_excel('results/export_ofs_bibliotheques_publiques_villes.xlsx')
df_villes_moyennes.to_excel('results/export_ofs_bibliotheques_publiques_villes_moyennes.xlsx')
df_villes_reponses.to_excel('results/export_ofs_bibliotheques_publiques_villes_reponses.xlsx')

df_communes.to_excel('results/export_ofs_bibliotheques_publiques_communes.xlsx')
df_communes_moyennes.to_excel('results/export_ofs_bibliotheques_publiques_communes_moyennes.xlsx')
df_communes_reponses.to_excel('results/export_ofs_bibliotheques_publiques_communes_reponses.xlsx')
In [31]:
# export CSV des dataframes individuels
df_unis.to_csv('results/export_ofs_bibliotheques_universitaires.csv', sep='\t')
df_unis_moyennes.to_csv('results/export_ofs_bibliotheques_universitaires_moyennes.csv', sep='\t')
df_unis_reponses.to_csv('results/export_ofs_bibliotheques_universitaires_reponses.csv', sep='\t')

df_unis_reseaux.to_csv('results/export_ofs_reseaux_bibliotheques_universites.csv', sep='\t')
df_unis_reseaux_moyennes.to_csv('results/export_ofs_reseaux_bibliotheques_universites_moyennes.csv', sep='\t')
df_unis_reseaux_reponses.to_csv('results/export_ofs_reseaux_bibliotheques_universites_reponses.csv', sep='\t')

df_hes.to_csv('results/export_ofs_bibliotheques_hes.csv', sep='\t')
df_hes_moyennes.to_csv('results/export_ofs_bibliotheques_hes_moyennes.csv', sep='\t')
df_hes_reponses.to_csv('results/export_ofs_bibliotheques_hes_reponses.csv', sep='\t')

df_hep.to_csv('results/export_ofs_bibliotheques_hep.csv', sep='\t')
df_hep_moyennes.to_csv('results/export_ofs_bibliotheques_hep_moyennes.csv', sep='\t')
df_hep_reponses.to_csv('results/export_ofs_bibliotheques_hep_reponses.csv', sep='\t')

df_bn.to_csv('results/export_ofs_bibliotheque_nationale.csv', sep='\t')
df_bn_moyennes.to_csv('results/export_ofs_bibliotheque_nationale_moyennes.csv', sep='\t')
df_bn_reponses.to_csv('results/export_ofs_bibliotheque_nationale_reponses.csv', sep='\t')

df_villes.to_csv('results/export_ofs_bibliotheques_publiques_villes.csv', sep='\t')
df_villes_moyennes.to_csv('results/export_ofs_bibliotheques_publiques_villes_moyennes.csv', sep='\t')
df_villes_reponses.to_csv('results/export_ofs_bibliotheques_publiques_villes_reponses.csv', sep='\t')

df_communes.to_csv('results/export_ofs_bibliotheques_publiques_communes.csv', sep='\t')
df_communes_moyennes.to_csv('results/export_ofs_bibliotheques_publiques_communes_moyennes.csv', sep='\t')
df_communes_reponses.to_csv('results/export_ofs_bibliotheques_publiques_communes_reponses.csv', sep='\t')
In [32]:
# ajout d'une colonne pourtaguer le type de bibliothèque pour les sommes
df_unis['TYPE'] = 'Bibliothèques universitaires'
df_unis_reseaux['TYPE'] = 'Réseaux de bibliothèques des universités'
df_hes['TYPE'] = 'Réseaux de bibliothèques des HES'
df_hep['TYPE'] = 'Bibliothèques des HEP'
df_bn['TYPE'] = 'Bibliothèque Nationale Suisse'
df_villes['TYPE'] = 'Bibliothèques publiques des villes'
df_communes['TYPE'] = 'Bibliothèques publiques communales et mixtes'
In [33]:
# ajout d'une colonne pourtaguer le type de bibliothèque pour les moyennes
df_unis_moyennes['TYPE'] = 'Bibliothèques universitaires'
df_unis_reseaux_moyennes['TYPE'] = 'Réseaux de bibliothèques des universités'
df_hes_moyennes['TYPE'] = 'Réseaux de bibliothèques des HES'
df_hep_moyennes['TYPE'] = 'Bibliothèques des HEP'
df_bn_moyennes['TYPE'] = 'Bibliothèque Nationale Suisse'
df_villes_moyennes['TYPE'] = 'Bibliothèques publiques des villes'
df_communes_moyennes['TYPE'] = 'Bibliothèques publiques communales et mixtes'
In [34]:
# ajout d'une colonne pourtaguer le type de bibliothèque pour le nombre de réponses
df_unis_reponses['TYPE'] = 'Bibliothèques universitaires'
df_unis_reseaux_reponses['TYPE'] = 'Réseaux de bibliothèques des universités'
df_hes_reponses['TYPE'] = 'Réseaux de bibliothèques des HES'
df_hep_reponses['TYPE'] = 'Bibliothèques des HEP'
df_bn_reponses['TYPE'] = 'Bibliothèque Nationale Suisse'
df_villes_reponses['TYPE'] = 'Bibliothèques publiques des villes'
df_communes_reponses['TYPE'] = 'Bibliothèques publiques communales et mixtes'
In [35]:
# fusion des df
df_total = pd.concat([df_unis, df_unis_reseaux, df_hes, df_hep, df_bn, df_villes, df_communes], sort=True)
In [36]:
# fusion des df pour les moyennes
df_moyennes = pd.concat([df_unis_moyennes, df_unis_reseaux_moyennes, df_hes_moyennes, df_hep_moyennes, df_bn_moyennes, df_villes_moyennes, df_communes_moyennes], sort=True)
In [37]:
# fusion des df pour les reponses
df_reponses = pd.concat([df_unis_reponses, df_unis_reseaux_reponses, df_hes_reponses, df_hep_reponses, df_bn_reponses, df_villes_reponses, df_communes_reponses], sort=True)
In [38]:
# export CSV et Excel
df_total.to_csv('results/export_ofs_totaux.csv', sep='\t')
df_total.to_excel('results/export_ofs_totaux.xlsx')
df_moyennes.to_csv('results/export_ofs_moyennes.csv', sep='\t')
df_moyennes.to_excel('results/export_ofs_moyennes.xlsx')
df_reponses.to_csv('results/export_ofs_reponses.csv', sep='\t')
df_reponses.to_excel('results/export_ofs_reponses.xlsx')
In [39]:
df_total
Out[39]:
B4 B5 C10 C11 C12 C13 C6 C7 C8 C9 ... G65 G66 G67 G68 G69 G70 G71 G72 NBIB TYPE
Année
2003 199366.0 4451696.0 1004.640 864.4800 84.9000 55.26 1337.0 571.0 540.0 226.0 ... 12978.0 19335.0 20561.0 102193.0 3157.0 5863455.0 1402212.0 2350918.0 14.0 Bibliothèques universitaires
2004 223932.0 5285870.0 1044.795 876.2300 109.2950 59.27 1396.0 597.0 574.0 225.0 ... 17579.0 19786.0 20628.0 162559.0 8512.0 5375400.0 1945571.0 2972510.0 14.0 Bibliothèques universitaires
2005 224456.0 5308574.0 1032.820 870.6500 101.5000 60.67 1388.0 587.0 594.0 207.0 ... 15734.0 18959.0 8470.0 299108.0 8907.0 5636871.0 2350626.0 3204853.0 14.0 Bibliothèques universitaires
2006 223269.0 5238288.0 930.300 676.3664 69.9233 46.00 1261.0 536.0 538.0 187.0 ... 4507.0 16419.0 11361.0 51890.0 6516.0 6515335.0 3593224.0 3621422.0 13.0 Bibliothèques universitaires
2007 221885.0 6817210.0 903.600 770.9040 81.2000 51.33 1274.0 508.0 528.0 238.0 ... 4479.0 6898.0 11143.0 70956.0 8450.0 8905402.0 3596678.0 4534047.0 13.0 Bibliothèques universitaires
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2003 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN Bibliothèques publiques communales et mixtes
2004 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN Bibliothèques publiques communales et mixtes
2005 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN Bibliothèques publiques communales et mixtes
2006 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN Bibliothèques publiques communales et mixtes
2007 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN Bibliothèques publiques communales et mixtes

112 rows × 88 columns

In [40]:
# afficher le nom des colonnes
df_total.columns
Out[40]:
Index(['B4', 'B5', 'C10', 'C11', 'C12', 'C13', 'C6', 'C7', 'C8', 'C9', 'CB1',
       'CD1', 'CD2', 'CG1', 'CG11', 'CG12', 'CG13', 'CG14', 'D14', 'D15',
       'D16', 'D17', 'D18', 'D19', 'D20', 'D21', 'D22', 'D23', 'D24', 'D25',
       'E26', 'E27', 'E28', 'E28b', 'E29', 'E30', 'E31', 'E32', 'E33', 'E34',
       'E35', 'E36', 'F37', 'F38', 'F39', 'F39a', 'F40', 'F41', 'F42', 'F43',
       'F44', 'F45', 'F45a', 'F46', 'F47', 'F47a', 'F47b', 'F47c', 'F47d',
       'F48', 'F49', 'F50', 'F51', 'F52', 'F53', 'F54', 'F55', 'F56', 'G57',
       'G58', 'G58a', 'G58b', 'G59', 'G60', 'G61', 'G62', 'G63', 'G64', 'G65',
       'G66', 'G67', 'G68', 'G69', 'G70', 'G71', 'G72', 'NBIB', 'TYPE'],
      dtype='object')

Données de population

In [41]:
df_population_2018 =  pd.read_excel(url_ofs_population, sheet_name='2018' , skiprows=3, nrows=1, usecols='A,H', names=('canton', '2018'))
df_population_2018.iloc[0,0] = 'Suisse'
df_population_2018
Out[41]:
canton 2018
0 Suisse 8544527
In [42]:
# fichier OFS : une année par onglet et 1 lignes en trop en haut
df_population = pd.DataFrame()
for annee in range (2003, 2019) :
    if annee > 2010 :
        df_population_temp =  pd.read_excel(url_ofs_population, sheet_name=str(annee) , skiprows=3, nrows=1, usecols='A,H', names=('canton', str(annee)))
    else :
        df_population_temp =  pd.read_excel(url_ofs_population, sheet_name=str(annee) , skiprows=4, nrows=1, usecols='A,H', names=('canton', str(annee)))
    # corriger la valeur pour la Suisse qui a des numéros de notes
    df_population_temp.iloc[0,0] = 'Nombre d\'habitants'
    # Renommer la colonne
    df_population_temp = df_population_temp.rename(columns={'canton' : 'Année'})
    # ajouter index et concatenner les colonnes
    df_population_temp = df_population_temp.set_index('Année')
    df_population = pd.concat([df_population, df_population_temp], axis=1)
    # print (str(annee))
df_population
Out[42]:
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
Année
Nombre d'habitants 7364148 7415102 7459128 7508739 7593494 7701856 7785806 7864012 7954662 8039060 8139631 8237666 8327126 8419550 8484130 8544527
In [43]:
# transposer
df_population = df_population.transpose()
df_population
Out[43]:
Année Nombre d'habitants
2003 7364148
2004 7415102
2005 7459128
2006 7508739
2007 7593494
2008 7701856
2009 7785806
2010 7864012
2011 7954662
2012 8039060
2013 8139631
2014 8237666
2015 8327126
2016 8419550
2017 8484130
2018 8544527
In [44]:
df_population.dtypes
Out[44]:
Année
Nombre d'habitants    int64
dtype: object
In [45]:
# export en CSV et Excel
df_population.to_csv('results/export_ofs_population_suisse_2003_2018.csv', sep='\t')
df_population.to_excel('results/export_ofs_population_suisse_2003_2018.xlsx')
In [46]:
# graphique pour toute la suisse 
df_population.plot(figsize=(15, 6), lw=2, title='Population Suisse')
Out[46]:
<matplotlib.axes._subplots.AxesSubplot at 0x2465a1a6248>

Données des étudiants

In [47]:
df_etudiants =  pd.read_excel(url_ofs_etudiants, skiprows=5, nrows=28)
df_etudiants
Out[47]:
Unnamed: 0 Degré primaire 1-2 (1) Degrés primaire 3-8 (2) Degré secondaire I Enseignement\nséparatif (3) Formation professionnelle initiale Ecoles de formation générale (4) Autres Formation professionnelle supérieure (5) Hautes écoles Unnamed: 10
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN Hautes écoles universitaires Hautes écoles spécialisées et pédagogiques
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 1980/81 119496.0 450502.0 362018.0 36668 216655.0 73536.0 8497.0 25164.0 61373 …
6 1985/86 120929.0 376139.0 314744.0 32529 234271.0 75067.0 8990.0 35643.0 74806 …
7 1990/91 134530.0 404154.0 271537.0 36164 213615.0 73847.0 8297.0 51307.0 85940 …
8 1995/96 151895.0 452789.0 280504.0 43724 187026.0 87893.0 7200.0 57307.0 88243 …
9 2000/01 148167.0 473739.0 278457.0 48594 207969.0 86200.0 21503.0 38674.0 96673 25137
10 2001/02 148548.0 470904.0 282210.0 49114 210304.0 82681.0 22566.0 37444.0 99570 30172
11 2002/03 148419.0 469511.0 287686.0 49921 210997.0 80025.0 23831.0 41171.0 104689 37928
12 2003/04 147080.0 465777.0 292730.0 50431 212146.0 80778.0 23433.0 41849.0 109334 43569
13 2004/05 147000.0 459191.0 296161.0 50341 211384.0 84335.0 22852.0 39067.0 111100 49054
14 2005/06 146474.0 454092.0 298436.0 48689 213174.0 87407.0 23886.0 38151.0 112373 54140
15 2006/07 143410.0 449649.0 296113.0 46327 218709.0 89851.0 24544.0 40338.0 115142 57179
16 2007/08 141659.0 445136.0 292348.0 44490 219354.0 91992.0 25897.0 46390.0 116909 60809
17 2008/09 142965.0 440885.0 288979.0 41624 225008.0 93247.0 26378.0 48071.0 120984 63746
18 2009/10 146980.0 436111.0 288604.0 38781 229079.0 95329.0 26872.0 50858.0 126940 69676
19 2010/11 148879.0 436076.0 290927.0 37130 228825.0 99659.0 30331.0 51280.0 131494 75035
20 2011/12 150344.0 435548.0 287242.0 35819 231758.0 100089.0 32235.0 55737.0 134838 79018
21 2012/13 154532.0 435461.0 283763.0 34987 230016.0 102653.0 30495.0 57334.0 138621 84035
22 2013/14 162464.0 452298.0 265819.0 33940 229369.0 104020.0 30464.0 60389.0 142163 87291
23 2014/15 167120.0 466834.0 255001.0 31698 229860.0 105651.0 30856.0 61145.0 143960 89656
24 2015/16 170557.0 477502.0 249074.0 31206 227477.0 106298.0 31277.0 56626.0 145946 92810
25 2016/17 170756.0 486824.0 247652.0 31394 225361.0 107536.0 32492.0 57093.0 148533 95570
26 2017/18 173896.0 511428.0 259381.0 … 223710.0 109087.0 32492.0 59122.0 150671 97233
27 2018/19 176229.0 517905.0 260677.0 … 220894.0 109705.0 32391.0 60598.0 152858 99672
In [48]:
# renommer la dernière colonne
df_etudiants = df_etudiants.rename(columns={'Unnamed: 10' : 'Hautes écoles spécialisées et pédagogiques'})
# supprimmer les premières 4 lignes
df_etudiants = df_etudiants.iloc[5:,:]
# recupérer l'année
df_etudiants['Année'] = df_etudiants['Unnamed: 0'].str[0:4].astype(int)
# remplacer ... par N/A
df_etudiants = df_etudiants.replace('…', 0)
df_etudiants
Out[48]:
Unnamed: 0 Degré primaire 1-2 (1) Degrés primaire 3-8 (2) Degré secondaire I Enseignement\nséparatif (3) Formation professionnelle initiale Ecoles de formation générale (4) Autres Formation professionnelle supérieure (5) Hautes écoles Hautes écoles spécialisées et pédagogiques Année
5 1980/81 119496.0 450502.0 362018.0 36668 216655.0 73536.0 8497.0 25164.0 61373 0 1980
6 1985/86 120929.0 376139.0 314744.0 32529 234271.0 75067.0 8990.0 35643.0 74806 0 1985
7 1990/91 134530.0 404154.0 271537.0 36164 213615.0 73847.0 8297.0 51307.0 85940 0 1990
8 1995/96 151895.0 452789.0 280504.0 43724 187026.0 87893.0 7200.0 57307.0 88243 0 1995
9 2000/01 148167.0 473739.0 278457.0 48594 207969.0 86200.0 21503.0 38674.0 96673 25137 2000
10 2001/02 148548.0 470904.0 282210.0 49114 210304.0 82681.0 22566.0 37444.0 99570 30172 2001
11 2002/03 148419.0 469511.0 287686.0 49921 210997.0 80025.0 23831.0 41171.0 104689 37928 2002
12 2003/04 147080.0 465777.0 292730.0 50431 212146.0 80778.0 23433.0 41849.0 109334 43569 2003
13 2004/05 147000.0 459191.0 296161.0 50341 211384.0 84335.0 22852.0 39067.0 111100 49054 2004
14 2005/06 146474.0 454092.0 298436.0 48689 213174.0 87407.0 23886.0 38151.0 112373 54140 2005
15 2006/07 143410.0 449649.0 296113.0 46327 218709.0 89851.0 24544.0 40338.0 115142 57179 2006
16 2007/08 141659.0 445136.0 292348.0 44490 219354.0 91992.0 25897.0 46390.0 116909 60809 2007
17 2008/09 142965.0 440885.0 288979.0 41624 225008.0 93247.0 26378.0 48071.0 120984 63746 2008
18 2009/10 146980.0 436111.0 288604.0 38781 229079.0 95329.0 26872.0 50858.0 126940 69676 2009
19 2010/11 148879.0 436076.0 290927.0 37130 228825.0 99659.0 30331.0 51280.0 131494 75035 2010
20 2011/12 150344.0 435548.0 287242.0 35819 231758.0 100089.0 32235.0 55737.0 134838 79018 2011
21 2012/13 154532.0 435461.0 283763.0 34987 230016.0 102653.0 30495.0 57334.0 138621 84035 2012
22 2013/14 162464.0 452298.0 265819.0 33940 229369.0 104020.0 30464.0 60389.0 142163 87291 2013
23 2014/15 167120.0 466834.0 255001.0 31698 229860.0 105651.0 30856.0 61145.0 143960 89656 2014
24 2015/16 170557.0 477502.0 249074.0 31206 227477.0 106298.0 31277.0 56626.0 145946 92810 2015
25 2016/17 170756.0 486824.0 247652.0 31394 225361.0 107536.0 32492.0 57093.0 148533 95570 2016
26 2017/18 173896.0 511428.0 259381.0 0 223710.0 109087.0 32492.0 59122.0 150671 97233 2017
27 2018/19 176229.0 517905.0 260677.0 0 220894.0 109705.0 32391.0 60598.0 152858 99672 2018
In [49]:
# ajouter le cycle 1+2 et 3
df_etudiants['Etudiants cycle 3'] = df_etudiants[df_etudiants.columns[-4]] +  df_etudiants['Hautes écoles'] + df_etudiants['Hautes écoles spécialisées et pédagogiques']
df_etudiants['Etudiants cycles 1 et 2'] = df_etudiants[df_etudiants.columns[1]] + df_etudiants[df_etudiants.columns[2]] + df_etudiants[df_etudiants.columns[3]] + df_etudiants[df_etudiants.columns[4]]  + df_etudiants[df_etudiants.columns[5]]  + df_etudiants[df_etudiants.columns[6]]  + df_etudiants[df_etudiants.columns[7]]
df_etudiants['Etudiants tous cycles confondus'] = df_etudiants['Etudiants cycle 3'] + df_etudiants['Etudiants cycles 1 et 2']
df_etudiants
Out[49]:
Unnamed: 0 Degré primaire 1-2 (1) Degrés primaire 3-8 (2) Degré secondaire I Enseignement\nséparatif (3) Formation professionnelle initiale Ecoles de formation générale (4) Autres Formation professionnelle supérieure (5) Hautes écoles Hautes écoles spécialisées et pédagogiques Année Etudiants cycle 3 Etudiants cycles 1 et 2 Etudiants tous cycles confondus
5 1980/81 119496.0 450502.0 362018.0 36668 216655.0 73536.0 8497.0 25164.0 61373 0 1980 86537.0 1267372.0 1353909.0
6 1985/86 120929.0 376139.0 314744.0 32529 234271.0 75067.0 8990.0 35643.0 74806 0 1985 110449.0 1162669.0 1273118.0
7 1990/91 134530.0 404154.0 271537.0 36164 213615.0 73847.0 8297.0 51307.0 85940 0 1990 137247.0 1142144.0 1279391.0
8 1995/96 151895.0 452789.0 280504.0 43724 187026.0 87893.0 7200.0 57307.0 88243 0 1995 145550.0 1211031.0 1356581.0
9 2000/01 148167.0 473739.0 278457.0 48594 207969.0 86200.0 21503.0 38674.0 96673 25137 2000 160484.0 1264629.0 1425113.0
10 2001/02 148548.0 470904.0 282210.0 49114 210304.0 82681.0 22566.0 37444.0 99570 30172 2001 167186.0 1266327.0 1433513.0
11 2002/03 148419.0 469511.0 287686.0 49921 210997.0 80025.0 23831.0 41171.0 104689 37928 2002 183788.0 1270390.0 1454178.0
12 2003/04 147080.0 465777.0 292730.0 50431 212146.0 80778.0 23433.0 41849.0 109334 43569 2003 194752.0 1272375.0 1467127.0
13 2004/05 147000.0 459191.0 296161.0 50341 211384.0 84335.0 22852.0 39067.0 111100 49054 2004 199221.0 1271264.0 1470485.0
14 2005/06 146474.0 454092.0 298436.0 48689 213174.0 87407.0 23886.0 38151.0 112373 54140 2005 204664.0 1272158.0 1476822.0
15 2006/07 143410.0 449649.0 296113.0 46327 218709.0 89851.0 24544.0 40338.0 115142 57179 2006 212659.0 1268603.0 1481262.0
16 2007/08 141659.0 445136.0 292348.0 44490 219354.0 91992.0 25897.0 46390.0 116909 60809 2007 224108.0 1260876.0 1484984.0
17 2008/09 142965.0 440885.0 288979.0 41624 225008.0 93247.0 26378.0 48071.0 120984 63746 2008 232801.0 1259086.0 1491887.0
18 2009/10 146980.0 436111.0 288604.0 38781 229079.0 95329.0 26872.0 50858.0 126940 69676 2009 247474.0 1261756.0 1509230.0
19 2010/11 148879.0 436076.0 290927.0 37130 228825.0 99659.0 30331.0 51280.0 131494 75035 2010 257809.0 1271827.0 1529636.0
20 2011/12 150344.0 435548.0 287242.0 35819 231758.0 100089.0 32235.0 55737.0 134838 79018 2011 269593.0 1273035.0 1542628.0
21 2012/13 154532.0 435461.0 283763.0 34987 230016.0 102653.0 30495.0 57334.0 138621 84035 2012 279990.0 1271907.0 1551897.0
22 2013/14 162464.0 452298.0 265819.0 33940 229369.0 104020.0 30464.0 60389.0 142163 87291 2013 289843.0 1278374.0 1568217.0
23 2014/15 167120.0 466834.0 255001.0 31698 229860.0 105651.0 30856.0 61145.0 143960 89656 2014 294761.0 1287020.0 1581781.0
24 2015/16 170557.0 477502.0 249074.0 31206 227477.0 106298.0 31277.0 56626.0 145946 92810 2015 295382.0 1293391.0 1588773.0
25 2016/17 170756.0 486824.0 247652.0 31394 225361.0 107536.0 32492.0 57093.0 148533 95570 2016 301196.0 1302015.0 1603211.0
26 2017/18 173896.0 511428.0 259381.0 0 223710.0 109087.0 32492.0 59122.0 150671 97233 2017 307026.0 1309994.0 1617020.0
27 2018/19 176229.0 517905.0 260677.0 0 220894.0 109705.0 32391.0 60598.0 152858 99672 2018 313128.0 1317801.0 1630929.0
In [50]:
df_etudiants_fin = df_etudiants.loc[df_etudiants['Année'] > 2002]
df_etudiants_fin = df_etudiants_fin.set_index('Année')
df_etudiants_fin
Out[50]:
Unnamed: 0 Degré primaire 1-2 (1) Degrés primaire 3-8 (2) Degré secondaire I Enseignement\nséparatif (3) Formation professionnelle initiale Ecoles de formation générale (4) Autres Formation professionnelle supérieure (5) Hautes écoles Hautes écoles spécialisées et pédagogiques Etudiants cycle 3 Etudiants cycles 1 et 2 Etudiants tous cycles confondus
Année
2003 2003/04 147080.0 465777.0 292730.0 50431 212146.0 80778.0 23433.0 41849.0 109334 43569 194752.0 1272375.0 1467127.0
2004 2004/05 147000.0 459191.0 296161.0 50341 211384.0 84335.0 22852.0 39067.0 111100 49054 199221.0 1271264.0 1470485.0
2005 2005/06 146474.0 454092.0 298436.0 48689 213174.0 87407.0 23886.0 38151.0 112373 54140 204664.0 1272158.0 1476822.0
2006 2006/07 143410.0 449649.0 296113.0 46327 218709.0 89851.0 24544.0 40338.0 115142 57179 212659.0 1268603.0 1481262.0
2007 2007/08 141659.0 445136.0 292348.0 44490 219354.0 91992.0 25897.0 46390.0 116909 60809 224108.0 1260876.0 1484984.0
2008 2008/09 142965.0 440885.0 288979.0 41624 225008.0 93247.0 26378.0 48071.0 120984 63746 232801.0 1259086.0 1491887.0
2009 2009/10 146980.0 436111.0 288604.0 38781 229079.0 95329.0 26872.0 50858.0 126940 69676 247474.0 1261756.0 1509230.0
2010 2010/11 148879.0 436076.0 290927.0 37130 228825.0 99659.0 30331.0 51280.0 131494 75035 257809.0 1271827.0 1529636.0
2011 2011/12 150344.0 435548.0 287242.0 35819 231758.0 100089.0 32235.0 55737.0 134838 79018 269593.0 1273035.0 1542628.0
2012 2012/13 154532.0 435461.0 283763.0 34987 230016.0 102653.0 30495.0 57334.0 138621 84035 279990.0 1271907.0 1551897.0
2013 2013/14 162464.0 452298.0 265819.0 33940 229369.0 104020.0 30464.0 60389.0 142163 87291 289843.0 1278374.0 1568217.0
2014 2014/15 167120.0 466834.0 255001.0 31698 229860.0 105651.0 30856.0 61145.0 143960 89656 294761.0 1287020.0 1581781.0
2015 2015/16 170557.0 477502.0 249074.0 31206 227477.0 106298.0 31277.0 56626.0 145946 92810 295382.0 1293391.0 1588773.0
2016 2016/17 170756.0 486824.0 247652.0 31394 225361.0 107536.0 32492.0 57093.0 148533 95570 301196.0 1302015.0 1603211.0
2017 2017/18 173896.0 511428.0 259381.0 0 223710.0 109087.0 32492.0 59122.0 150671 97233 307026.0 1309994.0 1617020.0
2018 2018/19 176229.0 517905.0 260677.0 0 220894.0 109705.0 32391.0 60598.0 152858 99672 313128.0 1317801.0 1630929.0
In [51]:
# export en CSV et Excel
df_etudiants_fin.to_csv('results/export_ofs_etudiants_2003_2018.csv', sep='\t')
df_etudiants_fin.to_excel('results/export_ofs_etudiants_2003_2018.xlsx')
In [52]:
# graphique d'étudiants par cycle
ax = df_etudiants_fin.plot(figsize=(15, 6), lw=2, title='Nombre d\'étudiants par cycle')

Frais d'acquisition : E32 et (E31 - E32)

Chiffres totales

In [53]:
E31 = pd.DataFrame()
E31['Bibliothèques universitaires'] = df_unis['E31'].fillna(0)
E31['Réseaux de bibliothèques des universités'] = df_unis_reseaux['E31'].fillna(0)
E31['Réseaux de bibliothèques des HES'] = df_hes['E31'].fillna(0)
E31['Réseaux de bibliothèques des HEP'] = df_hep['E31'].fillna(0)
E31['Bibliothèque nationale'] = df_bn['E31'].fillna(0) 
E31['Bibliothèques publiques des villes'] = df_villes['E31'].fillna(0)
E31['Bibliothèques publiques communales et mixtes'] = df_communes['E31'].fillna(0) 
E31
Out[53]:
Bibliothèques universitaires Réseaux de bibliothèques des universités Réseaux de bibliothèques des HES Réseaux de bibliothèques des HEP Bibliothèque nationale Bibliothèques publiques des villes Bibliothèques publiques communales et mixtes
Année
2003 44086391.92 0.00 1052751.00 0.0 1656000 12549470.53 0.00
2004 44827243.36 0.00 1239096.20 0.0 1720200 12737219.72 0.00
2005 46443358.21 10571994.07 1918048.93 0.0 1662336 14929319.75 0.00
2006 48114897.00 14622552.51 3493103.20 0.0 1662760 16929497.93 0.00
2007 50347581.00 15002969.00 3691379.00 0.0 1752384 17086114.00 0.00
2008 64888529.00 5037399.52 4413496.10 0.0 1776922 18358714.54 6234853.62
2009 68327134.00 5399491.00 4766860.00 0.0 1688967 18553817.19 6202608.70
2010 68574368.00 6002610.30 5374443.00 0.0 1774887 18991891.64 6659080.60
2011 68704553.00 6047758.10 5684917.00 0.0 1696910 18771178.35 7309623.30
2012 75394346.00 5809110.00 5962419.00 0.0 1712426 19136691.00 7294361.00
2013 78493738.00 6033722.00 5861881.00 1406963.0 1804496 19081297.75 7484125.25
2014 78856692.00 6582877.00 6002873.00 1223805.0 1874191 18650899.00 7740696.00
2015 78971599.00 5567398.00 6480632.00 1303167.0 1665355 17691422.00 7785889.00
2016 75799767.00 5704944.00 5168152.00 1209925.0 1498005 17968626.00 7843450.00
2017 75555074.00 3693023.00 5273669.00 1308490.0 1587447 16991991.00 7968928.00
2018 83031693.00 3627580.00 5073205.00 1406292.0 1278015 17579946.00 7980208.00
In [54]:
E32 = pd.DataFrame()
E32['Bibliothèques universitaires (ressources physiques)'] = E31['Bibliothèques universitaires'] - df_unis['E32'].fillna(0)
E32['Réseaux de bibliothèques des universités (ressources physiques)'] = E31['Réseaux de bibliothèques des universités'] - df_unis_reseaux['E32'].fillna(0)
E32['Réseaux de bibliothèques des HES (ressources physiques)'] = E31['Réseaux de bibliothèques des HES'] - df_hes['E32'].fillna(0)
E32['Bibliothèques des HEP (ressources physiques)'] = E31['Réseaux de bibliothèques des HEP'] - df_hep['E32'].fillna(0)
E32['Bibliothèque nationale (ressources physiques)'] = E31['Bibliothèque nationale'] - df_bn['E32'].fillna(0)
E32['Bibliothèques publiques des villes (ressources physiques)'] = E31['Bibliothèques publiques des villes'] - df_villes['E32'].fillna(0)
E32['Bibliothèques publiques communales et mixtes (ressources physiques)'] = E31['Bibliothèques publiques communales et mixtes'] - df_communes['E32'].fillna(0)
E32
Out[54]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques)
Année
2003 36356706.37 0.00 997751.00 0.0 1523000.0 11917617.53 0.00
2004 35519188.40 0.00 1186199.20 0.0 1570200.0 11934174.24 0.00
2005 35654791.33 8589967.37 1833148.93 0.0 1662336.0 14355392.65 0.00
2006 35865222.00 11669748.85 3395858.20 0.0 1662760.0 16327240.27 0.00
2007 36584027.00 12682182.00 3500202.00 0.0 1752384.0 16318742.00 0.00
2008 44403001.00 4306855.97 4100538.10 0.0 1679745.0 17589464.49 6234853.62
2009 45853126.00 4637129.00 4070561.00 0.0 1600227.0 17475503.19 6202608.70
2010 44116674.00 4960128.30 4400336.00 0.0 1696404.0 17962664.64 6659080.60
2011 42425711.00 5177004.10 4324522.00 0.0 1594398.0 17665265.35 7309623.30
2012 40878917.00 4807334.00 4494359.00 0.0 1640086.0 17671340.00 7294361.00
2013 40214242.00 5068681.00 4375303.00 1281944.0 1734016.0 17641099.75 7484125.25
2014 39471424.00 4849310.00 4209799.00 1080498.0 1801527.0 17080966.00 7740696.00
2015 34602545.00 4237618.00 4248577.00 1083066.0 1599092.0 15990129.00 7453591.00
2016 31394626.00 4221580.00 2966316.00 1005329.0 1444002.0 15941758.00 7545073.00
2017 32738518.00 2905979.00 2792946.00 1027772.0 1538279.0 15109534.00 7613764.00
2018 31599659.00 2694601.00 2349794.00 1061735.0 1248564.0 15391338.00 7592348.00
In [55]:
E32['Bibliothèques universitaires (ressources électroniques)'] = df_unis['E32'].fillna(0)
E32['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux['E32'].fillna(0)
E32['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes['E32'].fillna(0)
E32['Bibliothèques des HEP (ressources électroniques)'] = df_hep['E32'].fillna(0)
E32['Bibliothèque nationale (ressources électroniques)'] = df_bn['E32'].fillna(0) 
E32['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes['E32'].fillna(0)
E32['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes['E32'].fillna(0) 
E32
Out[55]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques) Bibliothèques universitaires (ressources électroniques) Réseaux de bibliothèques des universités (ressources électroniques) Réseaux de bibliothèques des HES (ressources électroniques) Bibliothèques des HEP (ressources électroniques) Bibliothèque nationale (ressources électroniques) Bibliothèques publiques des villes (ressources électroniques) Bibliothèques publiques communales et mixtes (ressources électroniques)
Année
2003 36356706.37 0.00 997751.00 0.0 1523000.0 11917617.53 0.00 7729685.55 0.00 55000.0 0.0 133000.0 631853.00 0.0
2004 35519188.40 0.00 1186199.20 0.0 1570200.0 11934174.24 0.00 9308054.96 0.00 52897.0 0.0 150000.0 803045.48 0.0
2005 35654791.33 8589967.37 1833148.93 0.0 1662336.0 14355392.65 0.00 10788566.88 1982026.70 84900.0 0.0 0.0 573927.10 0.0
2006 35865222.00 11669748.85 3395858.20 0.0 1662760.0 16327240.27 0.00 12249675.00 2952803.66 97245.0 0.0 0.0 602257.66 0.0
2007 36584027.00 12682182.00 3500202.00 0.0 1752384.0 16318742.00 0.00 13763554.00 2320787.00 191177.0 0.0 0.0 767372.00 0.0
2008 44403001.00 4306855.97 4100538.10 0.0 1679745.0 17589464.49 6234853.62 20485528.00 730543.55 312958.0 0.0 97177.0 769250.05 0.0
2009 45853126.00 4637129.00 4070561.00 0.0 1600227.0 17475503.19 6202608.70 22474008.00 762362.00 696299.0 0.0 88740.0 1078314.00 0.0
2010 44116674.00 4960128.30 4400336.00 0.0 1696404.0 17962664.64 6659080.60 24457694.00 1042482.00 974107.0 0.0 78483.0 1029227.00 0.0
2011 42425711.00 5177004.10 4324522.00 0.0 1594398.0 17665265.35 7309623.30 26278842.00 870754.00 1360395.0 0.0 102512.0 1105913.00 0.0
2012 40878917.00 4807334.00 4494359.00 0.0 1640086.0 17671340.00 7294361.00 34515429.00 1001776.00 1468060.0 0.0 72340.0 1465351.00 0.0
2013 40214242.00 5068681.00 4375303.00 1281944.0 1734016.0 17641099.75 7484125.25 38279496.00 965041.00 1486578.0 125019.0 70480.0 1440198.00 0.0
2014 39471424.00 4849310.00 4209799.00 1080498.0 1801527.0 17080966.00 7740696.00 39385268.00 1733567.00 1793074.0 143307.0 72664.0 1569933.00 0.0
2015 34602545.00 4237618.00 4248577.00 1083066.0 1599092.0 15990129.00 7453591.00 44369054.00 1329780.00 2232055.0 220101.0 66263.0 1701293.00 332298.0
2016 31394626.00 4221580.00 2966316.00 1005329.0 1444002.0 15941758.00 7545073.00 44405141.00 1483364.00 2201836.0 204596.0 54003.0 2026868.00 298377.0
2017 32738518.00 2905979.00 2792946.00 1027772.0 1538279.0 15109534.00 7613764.00 42816556.00 787044.00 2480723.0 280718.0 49168.0 1882457.00 355164.0
2018 31599659.00 2694601.00 2349794.00 1061735.0 1248564.0 15391338.00 7592348.00 51432034.00 932979.00 2723411.0 344557.0 29451.0 2188608.00 387860.0
In [56]:
# export en CSV et Excel
E32.to_csv('results/E32.csv', sep='\t')
E32.to_excel('results/E32.xlsx')
In [57]:
# création de la palette de couleurs à partir de tab20
col = plt.cm.tab20.colors
col1 = [col[0], col[2], col[4], col[6], col[8], col[10], col[12], col[14], col[16], col[18]]
col2 = [col[1], col[3], col[5], col[7], col[9], col[11], col[13], col[15], col[17], col[19]]
In [58]:
# graphique E32 et E31-E32 pour tous les types de bibliothèque 
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
E32.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 125000000])
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32)', fontsize=14, pad=20)
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_1.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [59]:
# graphique E32 et E31-E32 pour les bibs universitaires
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
col3 = col2[0:2]+col1[0:2]
E32.iloc[:,[0,1,7,8]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants universitaires')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 90000000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques universitaires', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [60]:
# graphique E32 et E31-E32 pour les HES et HEP
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
col3 = col2[2:4]+col1[2:4]
E32.iloc[:,[2,3,9,10]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19,
                                                       label='Nombre d\'étudiants des HES et HEP')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 8000000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques des HES et HEP', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_hep_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [61]:
# graphique E32 et E31-E32 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:7]+col1[4:7]
E32.iloc[:,[4,5,6,11,12,13]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 30000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_bn_villes_communes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [62]:
# graphique E32 et E31-E32 pour tous les types de bibliothèque 
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
E32.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 85000000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32)', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [63]:
E32_cat = pd.DataFrame()
E32_cat['Ressources physiques'] = E32.iloc[:,0] + E32.iloc[:,1] + E32.iloc[:,2] + E32.iloc[:,3] + E32.iloc[:,4] + E32.iloc[:,5] + E32.iloc[:,6]
E32_cat['Ressources électroniques'] = E32.iloc[:,7] + E32.iloc[:,8] + E32.iloc[:,9] + E32.iloc[:,10] + E32.iloc[:,11] + E32.iloc[:,12] + E32.iloc[:,13]
E32_cat.to_csv('results/E32_toutes_bibliotheques_confondues.csv', sep='\t')
E32_cat.to_excel('results/E32_toutes_bibliotheques_confondues.xlsx')
E32_cat
Out[63]:
Ressources physiques Ressources électroniques
Année
2003 50795074.90 8549538.55
2004 50209761.84 10313997.44
2005 62095636.28 13429420.68
2006 68920829.32 15901981.32
2007 70837537.00 17042890.00
2008 78314458.18 22395456.60
2009 79839154.89 25099723.00
2010 79795287.54 27581993.00
2011 78496523.75 29718416.00
2012 76786397.00 38522956.00
2013 77799411.00 42366812.00
2014 76234220.00 44697813.00
2015 69214618.00 50250844.00
2016 64518684.00 50674185.00
2017 63726792.00 48651830.00
2018 61938039.00 58038900.00
In [140]:
# graphique E32 et E31-E32 pour tous les types de bibliothèque : variante en deux couleurs
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
E32_cat['Ressources physiques'].plot.bar(stacked=True, color = col2[9], ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_cat['Ressources électroniques'].plot.bar(stacked=True, color = col1[9], ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 85000000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) toutes bibliothèques confondues', fontsize=13, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_3.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [65]:
# graphique E32 et E31-E32 pour les bibs universitaires
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
E32.iloc[:,[0,1]].plot.bar(stacked=True, color = col2, ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1, legend=False)
E32.iloc[:,[7,8]].plot.bar(stacked=True, color = col1, ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des universités')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 55000000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques universitaires', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [66]:
# graphique E32 et E31-E32 pour les HES et HEP
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
E32.iloc[:,[2,3]].plot.bar(stacked=True, color = col2[2:], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32.iloc[:,[9,10]].plot.bar(stacked=True, color = col1[2:], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des hautes écoles spécialisées et pédagogiques')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 6000000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques des HES et HEP', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_hep_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [67]:
# graphique E32 et E31-E32 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
E32.iloc[:,[4,5,6]].plot.bar(stacked=True, color = col2[4:], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32.iloc[:,[11,12,13]].plot.bar(stacked=True, color = col1[4:], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 30000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_bn_villes_communes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()

Frais d'acquisition : E32 et (E31 - E32)

Moyennes par Bibliothèque

In [68]:
E31_moyennes = pd.DataFrame()
E31_moyennes['Bibliothèques universitaires'] = df_unis_moyennes['E31'].fillna(0)
E31_moyennes['Réseaux de bibliothèques des universités'] = df_unis_reseaux_moyennes['E31'].fillna(0)
E31_moyennes['Réseaux de bibliothèques des HES'] = df_hes_moyennes['E31'].fillna(0)
E31_moyennes['Réseaux de bibliothèques des HEP'] = df_hep_moyennes['E31'].fillna(0)
E31_moyennes['Bibliothèque nationale'] = df_bn_moyennes['E31'].fillna(0) 
E31_moyennes['Bibliothèques publiques des villes'] = df_villes_moyennes['E31'].fillna(0)
E31_moyennes['Bibliothèques publiques communales et mixtes'] = df_communes_moyennes['E31'].fillna(0) 
E31_moyennes
Out[68]:
Bibliothèques universitaires Réseaux de bibliothèques des universités Réseaux de bibliothèques des HES Réseaux de bibliothèques des HEP Bibliothèque nationale Bibliothèques publiques des villes Bibliothèques publiques communales et mixtes
Année
2003 3.149028e+06 0.000000 105275.100000 0.000000 1656000 228172.191455 0.000000
2004 3.201946e+06 0.000000 112645.109091 0.000000 1720200 240324.900377 0.000000
2005 3.317383e+06 66074.962938 50474.971842 0.000000 1662336 171601.376437 0.000000
2006 3.701146e+06 147702.550606 105851.612121 0.000000 1662760 184016.281848 0.000000
2007 3.872891e+06 130460.600000 108569.970588 0.000000 1752384 169169.445545 0.000000
2008 4.634895e+06 70949.289014 119283.678378 0.000000 1776922 165393.824685 16110.732868
2009 4.880510e+06 52936.186275 119171.500000 0.000000 1688967 162752.782368 16237.195550
2010 4.898169e+06 72320.606024 111967.562500 0.000000 1774887 159595.728067 16773.502771
2011 4.907468e+06 74663.680247 138656.512195 0.000000 1696910 163227.637826 16136.033775
2012 5.385310e+06 76435.657895 129617.804348 0.000000 1712426 162175.347458 15857.306522
2013 5.606696e+06 72695.445783 133224.568182 140696.300000 1804496 160347.039916 15856.197564
2014 5.632621e+06 82285.962500 130497.239130 152975.625000 1874191 156730.243697 15481.392000
2015 5.640828e+06 74231.973333 132257.795918 144796.333333 1665355 149927.305085 15540.696607
2016 5.414269e+06 85148.417910 166714.580645 134436.111111 1498005 148501.041322 15500.889328
2017 5.037005e+06 59564.887097 164802.156250 145387.777778 1587447 143999.923729 15594.771037
2018 5.535446e+06 61484.406780 202928.200000 156254.666667 1278015 147730.638655 15376.123314
In [69]:
E32_moyennes = pd.DataFrame()
E32_moyennes['Bibliothèques universitaires (ressources physiques)'] = E31_moyennes['Bibliothèques universitaires'] - df_unis_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des universités (ressources physiques)'] = E31_moyennes['Réseaux de bibliothèques des universités'] - df_unis_reseaux_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des HES (ressources physiques)'] = E31_moyennes['Réseaux de bibliothèques des HES'] - df_hes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques des HEP (ressources physiques)'] = E31_moyennes['Réseaux de bibliothèques des HEP'] - df_hep_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèque nationale (ressources physiques)'] = E31_moyennes['Bibliothèque nationale'] - df_bn_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques publiques des villes (ressources physiques)'] = E31_moyennes['Bibliothèques publiques des villes'] - df_villes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques publiques communales et mixtes (ressources physiques)'] = E31_moyennes['Bibliothèques publiques communales et mixtes'] - df_communes_moyennes['E32'].fillna(0)
E32_moyennes
Out[69]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques)
Année
2003 2.596908e+06 0.000000 97417.957143 0.000000 1523000.0 213811.896000 0.000000
2004 2.537085e+06 0.000000 103828.942424 0.000000 1570200.0 223594.786211 0.000000
2005 2.546771e+06 52018.035987 47736.262165 0.000000 1662336.0 159644.561853 0.000000
2006 2.758863e+06 111248.184433 101220.897835 0.000000 1662760.0 168167.396058 0.000000
2007 2.814156e+06 104088.020455 97949.026144 0.000000 1752384.0 150898.683640 0.000000
2008 3.171643e+06 55729.631722 102812.204694 0.000000 1679745.0 148670.997511 16110.732868
2009 3.275223e+06 39322.579132 92390.769231 0.000000 1600227.0 140746.374205 16237.195550
2010 3.151191e+06 51879.782495 77178.026786 0.000000 1696404.0 139011.188067 16773.502771
2011 3.030408e+06 52336.654606 90070.976481 0.000000 1594398.0 142747.767456 16136.033775
2012 2.919923e+06 52583.848371 77187.090062 0.000000 1640086.0 136467.435177 15857.306522
2013 2.872446e+06 49718.279116 76048.491259 125068.925000 1734016.0 134629.218487 15856.197564
2014 2.819387e+06 53866.831352 77759.768542 132503.196429 1801527.0 130564.693697 15481.392000
2015 2.471610e+06 51304.731954 75025.616431 117283.708333 1599092.0 133082.819936 14654.568607
2016 2.242473e+06 55481.137910 88077.580645 108861.611111 1444002.0 129733.745026 14783.636924
2017 2.182568e+06 43168.137097 79259.983836 110298.027778 1538279.0 126729.676022 14764.948607
2018 2.106644e+06 41202.254606 93991.760000 113185.041667 1248564.0 128189.495798 14494.623314
In [70]:
E32_moyennes['Bibliothèques universitaires (ressources électroniques)'] = df_unis_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques des HEP (ressources électroniques)'] = df_hep_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèque nationale (ressources électroniques)'] = df_bn_moyennes['E32'].fillna(0) 
E32_moyennes['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes_moyennes['E32'].fillna(0) 
E32_moyennes
Out[70]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques) Bibliothèques universitaires (ressources électroniques) Réseaux de bibliothèques des universités (ressources électroniques) Réseaux de bibliothèques des HES (ressources électroniques) Bibliothèques des HEP (ressources électroniques) Bibliothèque nationale (ressources électroniques) Bibliothèques publiques des villes (ressources électroniques) Bibliothèques publiques communales et mixtes (ressources électroniques)
Année
2003 2.596908e+06 0.000000 97417.957143 0.000000 1523000.0 213811.896000 0.000000 5.521204e+05 0.000000 7857.142857 0.000000 133000.0 14360.295455 0.000000
2004 2.537085e+06 0.000000 103828.942424 0.000000 1570200.0 223594.786211 0.000000 6.648611e+05 0.000000 8816.166667 0.000000 150000.0 16730.114167 0.000000
2005 2.546771e+06 52018.035987 47736.262165 0.000000 1662336.0 159644.561853 0.000000 7.706119e+05 14056.926950 2738.709677 0.000000 0.0 11956.814583 0.000000
2006 2.758863e+06 111248.184433 101220.897835 0.000000 1662760.0 168167.396058 0.000000 9.422827e+05 36454.366173 4630.714286 0.000000 0.0 15848.885789 0.000000
2007 2.814156e+06 104088.020455 97949.026144 0.000000 1752384.0 150898.683640 0.000000 1.058735e+06 26372.579545 10620.944444 0.000000 0.0 18270.761905 0.000000
2008 3.171643e+06 55729.631722 102812.204694 0.000000 1679745.0 148670.997511 16110.732868 1.463252e+06 15219.657292 16471.473684 0.000000 97177.0 16722.827174 0.000000
2009 3.275223e+06 39322.579132 92390.769231 0.000000 1600227.0 140746.374205 16237.195550 1.605286e+06 13613.607143 26780.730769 0.000000 88740.0 22006.408163 0.000000
2010 3.151191e+06 51879.782495 77178.026786 0.000000 1696404.0 139011.188067 16773.502771 1.746978e+06 20440.823529 34789.535714 0.000000 78483.0 20584.540000 0.000000
2011 3.030408e+06 52336.654606 90070.976481 0.000000 1594398.0 142747.767456 16136.033775 1.877060e+06 22327.025641 48585.535714 0.000000 102512.0 20479.870370 0.000000
2012 2.919923e+06 52583.848371 77187.090062 0.000000 1640086.0 136467.435177 15857.306522 2.465388e+06 23851.809524 52430.714286 0.000000 72340.0 25707.912281 0.000000
2013 2.872446e+06 49718.279116 76048.491259 125068.925000 1734016.0 134629.218487 15856.197564 2.734250e+06 22977.166667 57176.076923 15627.375000 70480.0 25717.821429 0.000000
2014 2.819387e+06 53866.831352 77759.768542 132503.196429 1801527.0 130564.693697 15481.392000 2.813233e+06 28419.131148 52737.470588 20472.428571 72664.0 26165.550000 0.000000
2015 2.471610e+06 51304.731954 75025.616431 117283.708333 1599092.0 133082.819936 14654.568607 3.169218e+06 22927.241379 57232.179487 27512.625000 66263.0 16844.485149 886.128000
2016 2.242473e+06 55481.137910 88077.580645 108861.611111 1444002.0 129733.745026 14783.636924 3.171796e+06 29667.280000 78637.000000 25574.500000 54003.0 18767.296296 717.252404
2017 2.182568e+06 43168.137097 79259.983836 110298.027778 1538279.0 126729.676022 14764.948607 2.854437e+06 16396.750000 85542.172414 35089.750000 49168.0 17270.247706 829.822430
2018 2.106644e+06 41202.254606 93991.760000 113185.041667 1248564.0 128189.495798 14494.623314 3.428802e+06 20282.152174 108936.440000 43069.625000 29451.0 19541.142857 881.500000
In [71]:
# export en CSV et Excel
E32_moyennes.to_csv('results/E32_moyennes.csv', sep='\t')
E32_moyennes.to_excel('results/E32_moyennes.xlsx')
In [72]:
# graphique E32 et E31-E32 pour tous les types de bibliothèque : valeurs moyennes
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
E32_moyennes.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 9000000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : valeurs moyennes', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_moyennes_1.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [73]:
# graphique E32 et E31-E32 pour les bibs universitaires : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
col3 = col2[0:1]+col1[0:1]
rects1 = E32_moyennes.iloc[:,[0,7]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants universitaires')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 6000000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques universitaires', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals = df_unis_moyennes['E31']
etiquettes = df_unis_reponses['E32'].astype(int)
for i, etiquette, total in zip(ax1.patches, etiquettes, totals):
    ax1.text(i.get_x()+.03, total + 30000, 'N=' + str(etiquette), fontsize=8, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_moyennes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [74]:
# graphique E32 et E31-E32 moyenne pour les HES et HEP : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
col3 = col2[2:3]+col1[2:3]
col4 = col2[3:4]+col1[3:4]
E32_moyennes.iloc[:,[2,9]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,[3,10]].plot.bar(stacked=True, color = col4, ax=ax1, zorder=7, align='edge', width=0.4, edgecolor='white', linewidth=1)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19,
                                                       label='Nombre d\'étudiants des HES et HEP')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 220000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne pour les bibliothèques des HES et HEP', fontsize=12, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals1 = df_hes_moyennes['E31']
etiquettes1 = df_hes_reponses['E32'].astype(int)
totals2 = df_hep_moyennes['E31'].fillna(0).sort_index()
etiquettes2 = df_hep_reponses['E32'].fillna(0).astype(int).sort_index()
for i, etiquette, total in zip(ax1.patches, etiquettes1, totals1):
    ax1.text(i.get_x()-.38, total + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
for i, etiquette, total in zip(ax1.patches, etiquettes2, totals2):
    if (etiquette != 0):
        ax1.text(i.get_x()+.04, total + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=39)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_hep_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [75]:
# graphique E32 et E31-E32 pour la BN
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:5]+col1[4:5]
E32.iloc[:,[4,11]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 2000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèque nationale', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_bn.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [76]:
# graphique E32 et E31-E32 pour les bibs publiques des villes (>10'000 habitants) : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[5:6]+col1[5:6]
E32_moyennes.iloc[:,[5,12]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 250000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques publiques des villes (>10\'000 habitants)', fontsize=11, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals = df_villes_moyennes['E31']
etiquettes = df_villes_reponses['E32'].astype(int)
for i, etiquette, total in zip(ax1.patches, etiquettes, totals):
    ax1.text(i.get_x()+.03, total + 2000, 'N=' + str(etiquette), fontsize=8, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_villes_moyennes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [77]:
# graphique E32 et E31-E32 pour les bibs publiques des communes : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[6:7]+col1[6:7]
E32_moyennes.iloc[:,[6,13]].plot.bar(stacked=True, color = col4, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 18000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques publiques des communes (<10\'000 habitants)', fontsize=11, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals = df_communes_moyennes['E31'].fillna(0).sort_index()
etiquettes = df_communes_reponses['E32'].fillna(0).astype(int).sort_index()
etiquettes2 = df_communes_reponses['E31'].fillna(0).astype(int).sort_index()
for i, etiquette, etiquette2, total in zip(ax1.patches, etiquettes, etiquettes2, totals):
    if (etiquette != 0):
        ax1.text(i.get_x()+.03, total + 100, 'N=' + str(etiquette), fontsize=8, color='dimgrey', zorder=29)
    else :
        if (etiquette2 != 0):
            ax1.text(i.get_x()+.03, total + 100, 'N=' + str(etiquette2), fontsize=8, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_communes_moyennes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [78]:
# graphique E32 et E31-E32 pour tous les types de bibliothèque : valeurs moyennes
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
E32_moyennes.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 5500000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : valeurs moyennes', fontsize=12, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_moyennes_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [79]:
# graphique E32 et E31-E32 pour les bibs universitaires : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
E32_moyennes.iloc[:,0].plot.bar(stacked=True, color = col2[0], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1, legend=False)
E32_moyennes.iloc[:,7].plot.bar(stacked=True, color = col1[0], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des universités')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 3500000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques universitaires', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# ajout des N comme etiquettes
etiquettes = df_unis_reponses['E31'].astype(int).append(df_unis_reponses['E32'].astype(int))
count = 0
for i, etiquette in zip(ax1.patches, etiquettes):
    count = count + 1
    if (count <17):
        ax1.text(i.get_x()-.38, i.get_height() + 20000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
    else:
        ax1.text(i.get_x()+.03, i.get_height() + 20000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [80]:
# graphique E32 et E31-E32 pour les HES : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
E32_moyennes.iloc[:,2].plot.bar(stacked=True, color = col2[2], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,9].plot.bar(stacked=True, color = col1[2], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des hautes écoles spécialisées et pédagogiques')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 120000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques des HES', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
etiquettes = df_hes_reponses['E31'].astype(int).append(df_hes_reponses['E32'].astype(int))
count = 0
for i, etiquette in zip(ax1.patches, etiquettes):
    count = count + 1
    if (count <17):
        ax1.text(i.get_x()-.38, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
    else:
        ax1.text(i.get_x()+.03, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)

# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [81]:
# graphique E32 et E31-E32 pour les HEP : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
E32_moyennes.iloc[:,3].plot.bar(stacked=True, color = col2[3], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,10].plot.bar(stacked=True, color = col1[3], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des hautes écoles spécialisées et pédagogiques')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 140000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques des HEP', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
etiquettes = df_hep_reponses['E31'].fillna(0).astype(int).sort_index().append(df_hep_reponses['E32'].fillna(0).astype(int).sort_index())
count = 0
for i, etiquette in zip(ax1.patches, etiquettes):
    count = count + 1
    if (count <17):
        if (etiquette > 0):
            ax1.text(i.get_x()-.38, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
    else:
        if (etiquette > 0):
            ax1.text(i.get_x()+.03, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)

# sauvegarder le graphique
plt.savefig('figures/E32_E31_hep_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()

Offre : F37 et F45 + F47 (F47a, F47b, F47c, F47d dès 2015)

Chiffres totales

In [82]:
F47_45_37 = pd.DataFrame()
F47_45_37['Bibliothèques universitaires (ressources physiques)'] = df_unis['F37'].fillna(0)
F47_45_37['Réseaux de bibliothèques des universités (ressources physiques)'] = df_unis_reseaux['F37'].fillna(0)
F47_45_37['Réseaux de bibliothèques des HES (ressources physiques)'] = df_hes['F37'].fillna(0)
F47_45_37['Réseaux de bibliothèques des HEP (ressources physiques)'] = df_hep['F37'].fillna(0)
F47_45_37['Bibliothèque nationale (ressources physiques)'] = df_bn['F37'].fillna(0) 
F47_45_37['Bibliothèques publiques des villes (ressources physiques)'] = df_villes['F37'].fillna(0)
F47_45_37['Bibliothèques publiques communales et mixtes (ressources physiques)'] = df_communes['F37'].fillna(0) 
F47_45_37
Out[82]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Réseaux de bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques)
Année
2003 30171704.0 8092769.0 279411.0 0.0 3671587 11346159.0 0.0
2004 30632979.0 9119577.0 310437.0 0.0 3736732 11032192.0 0.0
2005 31143451.0 9175544.0 965974.0 0.0 3793102 12948653.0 0.0
2006 29219907.0 8422325.0 1444615.0 0.0 3835631 15691065.0 0.0
2007 29281173.0 9054472.0 1308635.0 0.0 5233320 14393471.0 0.0
2008 38042003.0 5350222.0 1486858.0 0.0 5298067 15267386.0 3588044.0
2009 38581024.0 4832540.0 1562916.0 0.0 5355581 18678844.0 3562324.0
2010 40467332.0 4376354.0 1980177.0 0.0 5420583 19087951.0 3791595.0
2011 41118521.0 4784425.0 2005311.0 0.0 5544450 19147653.0 4352880.0
2012 43842078.0 4637527.0 2420198.0 0.0 5617898 20575616.0 4470950.0
2013 43350607.0 4434090.0 2142265.0 695265.0 5675394 20924604.0 4603001.0
2014 43657855.0 4677187.0 2254128.0 610364.0 5732800 21303269.0 5002964.0
2015 43780812.0 4558586.0 2213003.0 752158.0 5790568 21368834.0 5180263.0
2016 46743003.0 4426068.0 2276916.0 734485.0 5844254 21639488.0 5239162.0
2017 46726347.0 3770246.0 2310839.0 737392.0 6189400 19783851.0 5389662.0
2018 44872005.0 3510127.0 2320960.0 769852.0 6443924 21349527.0 5501098.0
In [83]:
F47_45_37['Bibliothèques universitaires (ressources électroniques)'] = df_unis['F45'].fillna(0) + df_unis['F47'].fillna(0) + df_unis['F47a'].fillna(0) + df_unis['F47b'].fillna(0) + df_unis['F47c'].fillna(0) + df_unis['F47d'].fillna(0)
F47_45_37['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux['F45'].fillna(0) + df_unis_reseaux['F47'].fillna(0) + df_unis_reseaux['F47a'].fillna(0) + df_unis_reseaux['F47b'].fillna(0) + df_unis_reseaux['F47c'].fillna(0) + df_unis_reseaux['F47d'].fillna(0)
F47_45_37['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes['F45'].fillna(0) + df_hes['F47'].fillna(0) + df_hes['F47a'].fillna(0) + df_hes['F47b'].fillna(0) + df_hes['F47c'].fillna(0) + df_hes['F47d'].fillna(0)
F47_45_37['Bibliothèques des HEP (ressources électroniques)'] = df_hep['F45'].fillna(0) + df_hep['F47'].fillna(0) + df_hep['F47a'].fillna(0) + df_hep['F47b'].fillna(0) + df_hep['F47c'].fillna(0) + df_hep['F47d'].fillna(0)
F47_45_37['Bibliothèque nationale (ressources électroniques)'] = df_bn['F45'].fillna(0) + df_bn['F47'].fillna(0) + df_bn['F47a'].fillna(0) + df_bn['F47b'].fillna(0) + df_bn['F47c'].fillna(0) + df_bn['F47d'].fillna(0)
F47_45_37['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes['F45'].fillna(0) + df_villes['F47'].fillna(0) + df_villes['F47a'].fillna(0) + df_villes['F47b'].fillna(0) + df_villes['F47c'].fillna(0) + df_villes['F47d'].fillna(0)
F47_45_37['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes['F45'].fillna(0) + df_communes['F47'].fillna(0) + df_communes['F47a'].fillna(0) + df_communes['F47b'].fillna(0) + df_communes['F47c'].fillna(0) + df_communes['F47d'].fillna(0) 
F47_45_37
Out[83]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Réseaux de bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques) Bibliothèques universitaires (ressources électroniques) Réseaux de bibliothèques des universités (ressources électroniques) Réseaux de bibliothèques des HES (ressources électroniques) Bibliothèques des HEP (ressources électroniques) Bibliothèque nationale (ressources électroniques) Bibliothèques publiques des villes (ressources électroniques) Bibliothèques publiques communales et mixtes (ressources électroniques)
Année
2003 30171704.0 8092769.0 279411.0 0.0 3671587 11346159.0 0.0 136388.0 22294.0 16388.0 0.0 2760.0 44083.0 0.0
2004 30632979.0 9119577.0 310437.0 0.0 3736732 11032192.0 0.0 191832.0 33689.0 19305.0 0.0 3273.0 42462.0 0.0
2005 31143451.0 9175544.0 965974.0 0.0 3793102 12948653.0 0.0 248201.0 44106.0 28642.0 0.0 3296.0 10637.0 0.0
2006 29219907.0 8422325.0 1444615.0 0.0 3835631 15691065.0 0.0 283159.0 55145.0 49567.0 0.0 29627.0 86604.0 0.0
2007 29281173.0 9054472.0 1308635.0 0.0 5233320 14393471.0 0.0 343778.0 56572.0 73384.0 0.0 29636.0 45165.0 0.0
2008 38042003.0 5350222.0 1486858.0 0.0 5298067 15267386.0 3588044.0 620717.0 21256.0 112020.0 0.0 43095.0 54841.0 47770.0
2009 38581024.0 4832540.0 1562916.0 0.0 5355581 18678844.0 3562324.0 1224713.0 13368.0 76821.0 0.0 50388.0 245448.0 272371.0
2010 40467332.0 4376354.0 1980177.0 0.0 5420583 19087951.0 3791595.0 1706071.0 16931.0 91676.0 0.0 62009.0 467680.0 86862.0
2011 41118521.0 4784425.0 2005311.0 0.0 5544450 19147653.0 4352880.0 2273336.0 20943.0 151630.0 0.0 188998.0 382218.0 57482.0
2012 43842078.0 4637527.0 2420198.0 0.0 5617898 20575616.0 4470950.0 3484710.0 156071.0 218461.0 0.0 203294.0 575488.0 21526.0
2013 43350607.0 4434090.0 2142265.0 695265.0 5675394 20924604.0 4603001.0 3444532.0 158437.0 415607.1 22387.0 301673.0 780887.0 67273.0
2014 43657855.0 4677187.0 2254128.0 610364.0 5732800 21303269.0 5002964.0 2896676.0 182976.0 577355.0 4266.0 417889.0 1900118.0 2420757.0
2015 43780812.0 4558586.0 2213003.0 752158.0 5790568 21368834.0 5180263.0 6609928.0 437552.0 41036393.0 19741467.0 124505.0 3787049.0 5257612.0
2016 46743003.0 4426068.0 2276916.0 734485.0 5844254 21639488.0 5239162.0 6348389.0 574975.0 57210247.0 2566421.0 152028.0 5298802.0 5986448.0
2017 46726347.0 3770246.0 2310839.0 737392.0 6189400 19783851.0 5389662.0 8282897.0 1987.0 26770135.0 22625380.0 284006.0 8999437.0 6135666.0
2018 44872005.0 3510127.0 2320960.0 769852.0 6443924 21349527.0 5501098.0 9041055.0 2227.0 58164891.0 25210222.0 315257.0 27359745.0 6747322.0
In [84]:
# export en CSV et Excel
F47_45_37.to_csv('results/F47_45_37.csv', sep='\t')
F47_45_37.to_excel('results/F47_45_37.xlsx')
In [85]:
# création de la palette de couleurs à partir de tab20
col = plt.cm.tab20.colors
col1 = [col[0], col[2], col[4], col[6], col[8], col[10], col[12], col[14], col[16], col[18]]
col2 = [col[1], col[3], col[5], col[7], col[9], col[11], col[13], col[15], col[17], col[19]]
In [86]:
# graphique F47_45_37 pour tous les types de bibliothèque 
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
F47_45_37.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Offre totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 220000000])
ax.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47)', fontsize=14, pad=20)
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/F47_45_37.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [87]:
# graphique F47_45_37 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:7]+col1[4:7]
F47_45_37.iloc[:,[4,5,6,11,12,13]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Offre totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 70000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/EF47_45_37_bn_villes_communes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [88]:
# graphique F47_45_372 pour tous les types de bibliothèque 
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
F47_45_37.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
F47_45_37.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Offre totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 130000000])
# titre
ax.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47)', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/F47_45_37_all_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [89]:
F47_45_37_cat = pd.DataFrame()
F47_45_37_cat['Ressources physiques'] = F47_45_37.iloc[:,0] + F47_45_37.iloc[:,1] + F47_45_37.iloc[:,2] + F47_45_37.iloc[:,3] + F47_45_37.iloc[:,4] + F47_45_37.iloc[:,5] + F47_45_37.iloc[:,6]
F47_45_37_cat['Ressources électroniques'] = F47_45_37.iloc[:,7] + F47_45_37.iloc[:,8] + F47_45_37.iloc[:,9] + F47_45_37.iloc[:,10] + F47_45_37.iloc[:,11] + F47_45_37.iloc[:,12] + F47_45_37.iloc[:,13]
F47_45_37_cat.to_csv('results/F47_45_37_toutes_bibliotheques_confondues.csv', sep='\t')
F47_45_37_cat.to_excel('results/F47_45_37_toutes_bibliotheques_confondues.xlsx')
F47_45_37_cat
Out[89]:
Ressources physiques Ressources électroniques
Année
2003 53561630.0 221913.0
2004 54831917.0 290561.0
2005 58026724.0 334882.0
2006 58613543.0 504102.0
2007 59271071.0 548535.0
2008 69032580.0 899699.0
2009 72573229.0 1883109.0
2010 75123992.0 2431229.0
2011 76953240.0 3074607.0
2012 81564267.0 4659550.0
2013 81825226.0 5190796.1
2014 83238567.0 8400037.0
2015 83644224.0 76994506.0
2016 86903376.0 78137310.0
2017 84907737.0 73099508.0
2018 84767493.0 126840719.0
In [135]:
# graphique F47_45_37 pour tous les types de bibliothèque : variante en deux couleurs
plt.style.use('default')
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
F47_45_37_cat['Ressources physiques'].plot.bar(stacked=True, color = col2[9], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
F47_45_37_cat['Ressources électroniques'].plot.bar(stacked=True, color = col1[9], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Offre totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 130000000])
ax2.set_ylim([0, 12000000])
# titre
ax1.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47) toutes bibliothèques confondues', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/F47_45_37_all_3.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [91]:
# graphique F47_45_37 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
F47_45_37.iloc[:,[4,5,6]].plot.bar(stacked=True, color = col2[4:], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
F47_45_37.iloc[:,[11,12,13]].plot.bar(stacked=True, color = col1[4:], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 35000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/F47_45_37_bn_villes_communes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()

Utilisation : G59 + G62 + G63 + G68 et G71 + G72

Chiffres totales

In [92]:
G59_62_63_68_71_72 = pd.DataFrame()
G59_62_63_68_71_72['Bibliothèques universitaires (ressources physiques)'] = df_unis['G59'].fillna(0) + df_unis['G62'].fillna(0) + df_unis['G63'].fillna(0) + df_unis['G68'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des universités (ressources physiques)'] = df_unis_reseaux['G59'].fillna(0) + df_unis_reseaux['G62'].fillna(0) + df_unis_reseaux['G63'].fillna(0) + df_unis_reseaux['G68'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des HES (ressources physiques)'] = df_hes['G59'].fillna(0) + df_hes['G62'].fillna(0) + df_hes['G63'].fillna(0) + df_hes['G68'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des HEP (ressources physiques)'] = df_hep['G59'].fillna(0) + df_hep['G62'].fillna(0) + df_hep['G63'].fillna(0) + df_hep['G68'].fillna(0)
G59_62_63_68_71_72['Bibliothèque nationale (ressources physiques)'] = df_bn['G59'].fillna(0) + df_bn['G62'].fillna(0) + df_bn['G63'].fillna(0) + df_bn['G68'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques des villes (ressources physiques)'] = df_villes['G59'].fillna(0) + df_villes['G62'].fillna(0) + df_villes['G63'].fillna(0) + df_villes['G68'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques communales et mixtes (ressources physiques)'] = df_communes['G59'].fillna(0) + df_communes['G62'].fillna(0) + df_communes['G63'].fillna(0) + df_communes['G68'].fillna(0)
G59_62_63_68_71_72
Out[92]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Réseaux de bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques)
Année
2003 3469495.0 733324.0 115522.0 0.0 138462.0 16041680.0 0.0
2004 3870751.0 808144.0 113954.0 0.0 169691.0 17421298.0 0.0
2005 4127729.0 824543.0 471794.0 0.0 202314.0 22678536.0 0.0
2006 3777099.0 643156.0 678065.0 0.0 1912491.0 19999860.0 0.0
2007 3767357.0 800226.0 699408.0 0.0 1463879.0 22398743.0 0.0
2008 4413165.0 330746.0 840359.0 0.0 1618529.0 23936321.0 10263348.0
2009 5563442.0 289533.0 945129.0 0.0 1384831.0 24675707.0 10225515.0
2010 5827464.0 273901.0 1285249.0 0.0 243775.0 25492577.0 10772068.0
2011 5848731.0 289717.0 1286707.0 0.0 193313.0 25365242.0 11781812.0
2012 6782907.0 273410.0 1276991.0 0.0 186278.0 25432270.0 11773414.0
2013 6783195.0 299436.0 1456656.0 745714.0 190763.0 25274733.0 11966329.0
2014 7687470.0 392728.0 1510275.0 601106.0 190578.0 24776452.0 12526494.0
2015 7300403.0 371343.0 1498267.0 751084.0 143878.0 25316633.0 13205912.0
2016 7504042.0 351514.0 1672651.0 739620.0 128817.0 26241155.0 13022255.0
2017 7812068.0 296859.0 1677227.0 774026.0 125011.0 24492529.0 12919711.0
2018 6867052.0 300860.0 1500888.0 753089.0 149796.0 25935111.0 13210145.0
In [93]:
G59_62_63_68_71_72['Bibliothèques universitaires (ressources électroniques)'] = df_unis['G71'].fillna(0) + df_unis['G72'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux['G71'].fillna(0) + df_unis_reseaux['G72'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes['G71'].fillna(0) + df_hes['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèques des HEP (ressources électroniques)'] = df_hep['G71'].fillna(0) + df_hep['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèque nationale (ressources électroniques)'] = df_bn['G71'].fillna(0) + df_bn['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes['G71'].fillna(0) + df_villes['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes['G71'].fillna(0) + df_communes['G72'].fillna(0)
G59_62_63_68_71_72
Out[93]:
Bibliothèques universitaires (ressources physiques) Réseaux de bibliothèques des universités (ressources physiques) Réseaux de bibliothèques des HES (ressources physiques) Réseaux de bibliothèques des HEP (ressources physiques) Bibliothèque nationale (ressources physiques) Bibliothèques publiques des villes (ressources physiques) Bibliothèques publiques communales et mixtes (ressources physiques) Bibliothèques universitaires (ressources électroniques) Réseaux de bibliothèques des universités (ressources électroniques) Réseaux de bibliothèques des HES (ressources électroniques) Bibliothèques des HEP (ressources électroniques) Bibliothèque nationale (ressources électroniques) Bibliothèques publiques des villes (ressources électroniques) Bibliothèques publiques communales et mixtes (ressources électroniques)
Année
2003 3469495.0 733324.0 115522.0 0.0 138462.0 16041680.0 0.0 3753130.0 609780.0 450.0 0.0 25967.0 885.0 0.0
2004 3870751.0 808144.0 113954.0 0.0 169691.0 17421298.0 0.0 4918081.0 666425.0 12000.0 0.0 20653.0 10637.0 0.0
2005 4127729.0 824543.0 471794.0 0.0 202314.0 22678536.0 0.0 5555479.0 660142.0 2362.0 0.0 11042.0 20537.0 0.0
2006 3777099.0 643156.0 678065.0 0.0 1912491.0 19999860.0 0.0 7214646.0 740098.0 113920.0 0.0 22756.0 7266.0 0.0
2007 3767357.0 800226.0 699408.0 0.0 1463879.0 22398743.0 0.0 8130725.0 798799.0 30113.0 0.0 40154.0 9623.0 0.0
2008 4413165.0 330746.0 840359.0 0.0 1618529.0 23936321.0 10263348.0 13496035.0 295850.0 62069.0 0.0 46848.0 140650.0 0.0
2009 5563442.0 289533.0 945129.0 0.0 1384831.0 24675707.0 10225515.0 15911118.0 321277.0 58343.0 0.0 39883.0 37730.0 0.0
2010 5827464.0 273901.0 1285249.0 0.0 243775.0 25492577.0 10772068.0 16505232.0 326768.0 34334.0 0.0 45187.0 75391.0 0.0
2011 5848731.0 289717.0 1286707.0 0.0 193313.0 25365242.0 11781812.0 46274622.0 354548.0 34423.0 0.0 325299.0 145904.0 10617.0
2012 6782907.0 273410.0 1276991.0 0.0 186278.0 25432270.0 11773414.0 140514050.0 432212.0 38537.0 0.0 163911.0 253709.0 39816.0
2013 6783195.0 299436.0 1456656.0 745714.0 190763.0 25274733.0 11966329.0 49766175.0 358729.0 49266.0 18724.0 172248.0 421275.0 71004.0
2014 7687470.0 392728.0 1510275.0 601106.0 190578.0 24776452.0 12526494.0 60001854.0 439158.0 163785.0 26987.0 347126.0 572157.0 168680.0
2015 7300403.0 371343.0 1498267.0 751084.0 143878.0 25316633.0 13205912.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2016 7504042.0 351514.0 1672651.0 739620.0 128817.0 26241155.0 13022255.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2017 7812068.0 296859.0 1677227.0 774026.0 125011.0 24492529.0 12919711.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2018 6867052.0 300860.0 1500888.0 753089.0 149796.0 25935111.0 13210145.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
In [94]:
# export en CSV et Excel
G59_62_63_68_71_72.to_csv('results/G59_62_63_68_71_72.csv', sep='\t')
G59_62_63_68_71_72.to_excel('results/G59_62_63_68_71_72.xlsx')
In [95]:
# création de la palette de couleurs à partir de tab20
col = plt.cm.tab20.colors
col1 = [col[0], col[2], col[4], col[6], col[8], col[10], col[12], col[14], col[16], col[18]]
col2 = [col[1], col[3], col[5], col[7], col[9], col[11], col[13], col[15], col[17], col[19]]
In [96]:
# graphique G59_62_63_68_71_72 pour tous les types de bibliothèque 
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
G59_62_63_68_71_72.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Utilisation totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 220000000])
ax.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72)', fontsize=14, pad=20)
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/G59_62_63_68_71_72.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [97]:
# graphique G59_62_63_68_71_72 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:7]+col1[4:7]
G59_62_63_68_71_72.iloc[:,[4,5,6,11,12,13]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Utilisation totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 40000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/G59_62_63_68_71_72_bn_villes_communes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [103]:
# graphique G59_62_63_68_71_72 pour tous les types de bibliothèque 
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
G59_62_63_68_71_72.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
G59_62_63_68_71_72.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Utilisation totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 130000000])
# titre
ax.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72)', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/G59_62_63_68_71_72_all_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
In [99]:
G59_62_63_68_71_72_cat = pd.DataFrame()
G59_62_63_68_71_72_cat['Ressources physiques'] = G59_62_63_68_71_72.iloc[:,0] + G59_62_63_68_71_72.iloc[:,1] + G59_62_63_68_71_72.iloc[:,2] + G59_62_63_68_71_72.iloc[:,3] + G59_62_63_68_71_72.iloc[:,4] + G59_62_63_68_71_72.iloc[:,5] + G59_62_63_68_71_72.iloc[:,6]
G59_62_63_68_71_72_cat['Ressources électroniques'] = G59_62_63_68_71_72.iloc[:,7] + G59_62_63_68_71_72.iloc[:,8] + G59_62_63_68_71_72.iloc[:,9] + G59_62_63_68_71_72.iloc[:,10] + G59_62_63_68_71_72.iloc[:,11] + G59_62_63_68_71_72.iloc[:,12] + G59_62_63_68_71_72.iloc[:,13]
G59_62_63_68_71_72_cat.to_csv('results/G59_62_63_68_71_72_toutes_bibliotheques_confondues.csv', sep='\t')
G59_62_63_68_71_72_cat.to_excel('results/G59_62_63_68_71_72_toutes_bibliotheques_confondues.xlsx')
G59_62_63_68_71_72_cat
Out[99]:
Ressources physiques Ressources électroniques
Année
2003 20498483.0 4390212.0
2004 22383838.0 5627796.0
2005 28304916.0 6249562.0
2006 27010671.0 8098686.0
2007 29129613.0 9009414.0
2008 41402468.0 14041452.0
2009 43084157.0 16368351.0
2010 43895034.0 16986912.0
2011 44765522.0 47145413.0
2012 45725270.0 141442235.0
2013 46716826.0 50857421.0
2014 47685103.0 61719747.0
2015 48587520.0 0.0
2016 49660054.0 0.0
2017 48097431.0 0.0
2018 48716941.0 0.0
In [100]:
G59_62_63_68_71_72_cat['Ressources électroniques'][2012]
Out[100]:
141442235.0
In [134]:
# graphique G59_62_63_68_71_72 pour tous les types de bibliothèque : variante en deux couleurs
# supprimer la valeur de 2012 qui est abérrante
G59_62_63_68_71_72_cat['Ressources électroniques'][2012] = np.nan
plt.style.use('default')
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
G59_62_63_68_71_72_cat['Ressources physiques'].plot.bar(stacked=True, color = col2[9], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
G59_62_63_68_71_72_cat['Ressources électroniques'].plot.bar(stacked=True, color = col1[9], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Utilisation totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 62000000])
ax2.set_ylim([0, 9600000])
# titre
ax1.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72)', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/G59_62_63_68_71_72_all_3.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
In [ ]:
 
In [ ]: